這題又是一道比較經典和基礎的DFS
Sample Input
4 6 4 3 2 2 1 1
5 3 2 1 1
400 12 50 50 50 50 50 50 25 25 25 25 25 25
0 0
Sample Output
Sums of 4:
4
3+1
2+2
2+1+1
Sums of 5:
NONE
Sums of 400:
50+50+50+50+50+50+25+25+25+25
50+50+50+50+50+25+25+25+25+25+25
如圖 就是在n個數中找出總和為t的一些數 而且還不能有重復 所以我們設置一個變量來記錄一下 如果a[i]和這個變量相同的話就不要搜了
void dprint(int len,int s,int last)
{
int fa=-1;
int i;
for(i=s;i<n;i++)
{
if(last-a[i]==0&&a[i]!=fa)
{
stack[len]=a[i];
int i;
for(i=0;i<len;i++)
printf("%d+",stack[i]);
printf("%d\n",stack[i]);
flag=1;
}
else
{
if(last-a[i]>0&&a[i]!=fa)
{
stack[len]=a[i];
dprint(len+1,i+1,last-a[i]);
}
}
fa=a[i];
}
}