题意:给定一个非递减的序列,要求从这些序列中找出一系列的数相加等于要求的数
思路:简单深搜
code:
#include<cstdio>
#include<algorithm>
using namespace std;
int a[20],b[20],sum;
int n,len,cut;
bool cmp(int a,int b)
{
return a>b;
}
void dfs(int x,int y,int sum,int m)
{
if(sum>n||m>=len)return ;
if(sum==n){
cut++;
printf("%d",b[0]);
for(int i=1;i<m;i++){
printf("+%d",b[i]);
}
printf("\n");
return ;
}
for(int i=y;i<len;i++){
b[m]=a[i];
dfs(a[i],i+1,sum+a[i],m+1);
while(i+1<len && a[i] == a[i+1])
i++;
}
}
int main()
{
while(~scanf("%d %d",&n,&len)&&len){
for(int i=0;i<len;i++)
scanf("%d",&a[i]);
sort(a,a+len,cmp);
printf("Sums of %d:\n",n);
cut=0;
dfs(0,0,0,0);
if(!cut)printf("NONE\n");
}
return 0;
}