题目大意:
给一个总和t以及n个整数,找到n个整数中加起来等于t的序列
解题思路:
深度优先搜索问题
代码如下:
#include<stdio.h>
#include<string.h>
int data[15];
int ans[15];
int visit[15];
int flag;
int n,t;
void dfs(int sum,int count,int pos)
{
int i;
if(!sum)
{
flag=1;
printf("%d",ans[0]);
for(i=1;i<count;i++)
printf("+%d",ans[i]);
printf("\n");
return;
}
for(i=pos;i<n;i++)
{
if(!visit[i]&&data[i]<=sum
&&(data[i]!=data[i-1]||i==pos))
{
visit[i]=1;
ans[count]=data[i];
dfs(sum-data[i],count+1,i+1);
visit[i]=0;
}
}
}
int main()
{
int i;
while(scanf("%d%d",&t,&n)&&(t+n))
{
memset(visit,0,sizeof(visit));
for(i=0;i<n;i++)
{
scanf("%d",&data[i]);
if(data[i]>t) visit[i]=1;
}
printf("Sums of %d:\n",t);
flag=0;
dfs(t,0,0);
if(!flag) printf("NONE\n");
}
return 0;
}