本文主要是介绍poj 1564 Sum It Up,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
http://poj.org/problem?id=1564
给你一些数,要求你输出用这些数构成的子集的和等于一个指定的数,用深搜。
#include<stdio.h>
#include<string.h>
int a[15],vis[15];
int t,n,flag;
void dfs(int i,int sum)
{
if(sum==t)
{
int f;
flag=1;
for(int k=1;k<=n;k++)
{
if(vis[k]==1)
{
printf("%d",a[k]);
f=k;
break;
}
}
for(int k=f+1;k<=n;k++)
{
if(vis[k]==1)
{
printf("+%d",a[k]);
}
}
printf("\n");
return;
}
for(int j=i;j<=n;j++)
{
if(a[j]<=t-sum&&vis[j]==0&&(j==i||a[j]!=a[j-1]))
{
vis[j]=1;
dfs(j+1,sum+a[j]);
vis[j]=0;
}
}
}
int main()
{
while(scanf("%d%d",&t,&n))
{
if(n==0) break;
flag=0;
printf("Sums of %d:\n",t);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
memset(vis,0,sizeof(vis));
dfs(1,0);
if(flag==0) printf("NONE\n");
}
return 0;
}
这篇关于poj 1564 Sum It Up的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!