Sum It Up(搜索)

http://acm.hdu.edu.cn/showproblem.php?pid=1258

include<stdio.h>

include

include<string.h>

include

using namespace std;
int sum,n;
int a[1005],b[1005],c[1005],op=0;
void dfs(int s,int start,int bN)
{
if(ssum)
{
{
op=1;
printf("%d",b[1]);
for(int i=2; i<bN; i++)
printf("+%d",b[i]);
printf(" ") ;
}
return;
}
for(int i=start; i<=n; i++)///每次都是往后面找,用start来记录每次搜索的起始位置
{
if(s+a[i]<=sum)///满足条件即可,
{
b[bN]=a[i];
dfs(s+a[i],i+1,bN+1);
while(i+1<=n&&a[i]
a[i+1])i++;///精华,,此句就可以达到去重的目的,即本次搜索完毕后(收到结果或者没有收到结果)
///看下一个搜索的是否和当前的相同,相同则跳过(自己运行一遍)
}
}
}
int main()
{
while(scanf("%d%d",&sum,&n))
{
if(n0)break;
op=0;
memset(c,0,sizeof(c));
for(int i=1; i<=n; i++)
scanf("%d",&a[i]);
printf("Sums of %d: ",sum);
dfs(0,1,1);
if(op
0)printf("NONE ");
}
return 0;
}

梦里不知身是客,一晌贪欢。
原文地址:https://www.cnblogs.com/dccmmtop/p/5475235.html