您的位置:首页 > 其它

POJ1564 ——Sum It Up

2012-08-18 17:07 351 查看
DFS搜索由大的数往小的数

View Code

#include <stdio.h>
#include <string.h>
int ans,n,a[1001];
int b[1010];
bool f;
void dfs(int v,int t,int g)
{
int i;
if(v==ans)
{
f = true;
for(i=1;i<t-1;i++)
printf("%d+",b[i]);
printf("%d\n",b[t-1]);
return;
}
for(i=g;i>=0;i--)
{
if(a[i])
{
if(i+v > ans) continue;
else
{
a[i]--;
b[t] = i;
dfs(i+v,t+1,i);
a[i]++;
}
}
}
}
int main(void)
{
int i,data;
int maxx;
while(scanf("%d %d",&ans,&n)!=EOF && (ans!=0 || n!=0))
{
memset(a,0,sizeof(a));
maxx = -1;
for(i=1;i<=n;i++)
{
scanf("%d",&data);
if(data > maxx) maxx = data;
a[data]++;
}
f = false;
printf("Sums of %d:\n",ans);
dfs(0,1,maxx);
if(!f)
printf("NONE\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: