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("\n") ;
}
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:\n",sum);
dfs(0,1,1);
if(op
0)printf("NONE\n");
}
return 0;
}

posted @ 2016-05-09 20:00  -梦里不知身是客  阅读(333)  评论(0编辑  收藏  举报