给出数 n,k ,再给出 n 个非递增的数,输出所有的可能使几个数的和等于 k 的表达式
const int N=100+5;
int n,m,t;
int i,j,k;
int a[N];
bool vis[N],flag;
int ans[N];
void DFS(int cur,int num,int sum)
{
if(sum==k){
for(int i=0;i<num;i++){
if(i) printf("+%d",ans[i]);
else printf("%d",ans[i]);
}
puts("");
flag=1;
return ;
}
for(int i=cur;i<n;i++){
if((i==cur || a[i]!=a[i-1]) && sum+a[i]<=k){ //形如 aaaabbb,则取第一个 a/b,判重
ans[num]=a[i];
DFS(i+1,num+1,sum+a[i]);
}
}
}
int main()
{
//IOS;
int num=0;
while(sdd(k,n)==2,k){
for(i=0;i<n;i++) cin>>a[i];
ms(vis,0);
printf("Sums of %d:\n",k);
flag=0;
DFS(0,0,0);
if(!flag) puts("NONE");
}
//PAUSE;
return 0;
}