Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1258

dfs

View Code
 1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 const int N=20;
5 int a[N],n,t,flag;
6 bool vis[N];
7 void print()
8 {
9 flag=1;
10 bool bol=0;
11 int i;
12 for (i=1;i<=n;i++) if (vis[i])
13 {
14 if (bol) printf("+%d",a[i]);
15 else {bol=1; printf("%d",a[i]);}
16 }
17 printf("\n");
18 }
19 void dfs(int s,int p)
20 {
21 if (s==t) {print(); return;}
22 int i;
23 for (i=p+1;i<=n;i++)
24 {
25 vis[i]=1;
26 if (s+a[i]<=t) dfs(s+a[i],i);
27 vis[i]=0;
28 while (i<=n && a[i]==a[i+1]) i++;
29 }
30 }
31 int main()
32 {
33 int i;
34 while (scanf("%d%d",&t,&n),n||t)
35 {
36 flag=0;
37 for (i=1;i<=n;i++) scanf("%d",&a[i]);
38 printf("Sums of %d:\n",t);
39 dfs(0,0);
40 if (!flag) printf("NONE\n");
41 }
42 return 0;
43 }

 

posted on 2012-01-13 16:17  Qiuqiqiu  阅读(192)  评论(0编辑  收藏  举报