Time
Limit: 2000/1000 MS (Java/Others) Memory Limit:
65536/32768 K (Java/Others)
Total Submission(s):
3538 Accepted Submission(s):
1788
while(a[i+1] == a[i]) i++;)。
1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 int t,n; 5 int a[103],b[103]; 6 bool flag; 7 bool cmp(int a,int b) 8 { 9 return a>b; 10 } 11 void dfs(int sum,int k,int j) //k代表要求得数组下标,j代表整个数组的下标 12 { 13 int i; 14 if (sum>t) 15 return; 16 if (sum == t) 17 { 18 cout<<b[0]; 19 for (i=1;i<k;i++) 20 cout<<"+"<<b[i]; 21 cout<<endl; 22 flag = false; 23 return ; 24 } 25 for(i=j;i<n;i++) 26 { 27 if(sum+a[i]>t) 28 continue; 29 b[k] = a[i]; 30 dfs(sum+a[i],k+1,i+1); 31 while(a[i+1] == a[i]) 32 i++; 33 } 34 } 35 int main() 36 { 37 int i; 38 while(cin>>t>>n && t && n) 39 { 40 flag = true; 41 for(i=0;i<n;i++) 42 cin>>a[i]; 43 sort(a,a+n,cmp); 44 cout<<"Sums of "<<t<<":"<<endl; 45 dfs(0,0,0); 46 if (flag) 47 cout<<"NONE"<<endl; 48 } 49 return 0; 50 }
HDU 1258 Sum It Up,布布扣,bubuko.com
原文:http://www.cnblogs.com/yazhou/p/3634089.html