POJ1564 ——Sum It Up

DFS搜索由大的数往小的数

View Code
 1 #include <stdio.h>
 2 #include <string.h>
 3 int ans,n,a[1001];
 4 int b[1010];
 5 bool f;
 6 void dfs(int v,int t,int g)
 7 {
 8     int i;
 9     if(v==ans)
10     {
11         f = true;
12         for(i=1;i<t-1;i++)
13             printf("%d+",b[i]);
14         printf("%d\n",b[t-1]);
15         return;
16     }
17     for(i=g;i>=0;i--)
18     {
19         if(a[i])
20         {
21             if(i+v > ans) continue;
22             else
23             {
24                 a[i]--;
25                 b[t] = i;
26                 dfs(i+v,t+1,i);
27                 a[i]++;
28             }
29         }
30     }
31 }
32 int main(void)
33 {
34     int i,data;
35     int maxx;
36     while(scanf("%d %d",&ans,&n)!=EOF && (ans!=0 || n!=0))
37     {
38         memset(a,0,sizeof(a));
39         maxx = -1;
40         for(i=1;i<=n;i++)
41         {
42             scanf("%d",&data);
43             if(data > maxx) maxx = data;
44             a[data]++;
45         }
46         f = false;
47         printf("Sums of %d:\n",ans);
48         dfs(0,1,maxx);    
49         if(!f)
50             printf("NONE\n");
51     }
52     return 0;
53 }
posted @ 2012-08-18 17:07  Wheat″  阅读(108)  评论(0)    收藏  举报