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 }


浙公网安备 33010602011771号