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(op0)printf("NONE
");
}
return 0;
}