您的位置:首页 > 其它

HDU 1258 Sum It Up

2012-01-13 16:17 330 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1258

dfs

View Code

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int N=20;
int a
,n,t,flag;
bool vis
;
void print()
{
flag=1;
bool bol=0;
int i;
for (i=1;i<=n;i++) if (vis[i])
{
if (bol) printf("+%d",a[i]);
else {bol=1; printf("%d",a[i]);}
}
printf("\n");
}
void dfs(int s,int p)
{
if (s==t) {print(); return;}
int i;
for (i=p+1;i<=n;i++)
{
vis[i]=1;
if (s+a[i]<=t) dfs(s+a[i],i);
vis[i]=0;
while (i<=n && a[i]==a[i+1]) i++;
}
}
int main()
{
int i;
while (scanf("%d%d",&t,&n),n||t)
{
flag=0;
for (i=1;i<=n;i++) scanf("%d",&a[i]);
printf("Sums of %d:\n",t);
dfs(0,0);
if (!flag) printf("NONE\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: