fork download
  1. #include <algorithm>
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. using namespace std;
  5. int target,n;
  6. int flag = 0;
  7. int Answer[31];
  8. bool Taken[31];
  9. void dfs (int Nums[] , int total , int step )
  10. {
  11. int tag = -1;//
  12. if ( total == target ){
  13. flag = 1;
  14. int i;
  15. for ( i=1 ; i<step ; i++ ){
  16. if ( i!=1 )
  17. printf(" ");
  18. printf("%d",Answer[i]);
  19. }
  20. printf("\n");
  21. return;
  22. }
  23.  
  24. int k;
  25. for ( k=1 ; k<=n ; k++ ){
  26. if (Taken[k] == false){
  27. if (Nums[k] > tag){//
  28. if (total + Nums[k] <= target && Nums[k]>=Answer[step-1] ){
  29. tag = Nums[k];
  30. Answer[step] = Nums[k];
  31. Taken[k] = true;
  32. dfs(Nums, total + Nums[k], step + 1);
  33. Answer[step] = 0;//
  34. tag = Nums[k];//
  35. Taken[k] = false;
  36. }
  37. }
  38. }
  39. }
  40.  
  41. }
  42.  
  43.  
  44. int main()
  45. {
  46. int Nums[31];
  47. int i,j;
  48. while(scanf("%d%d",&n,&target)==2){
  49. for( i=1 ; i<=n ; i++ )
  50. scanf("%d",&Nums[i]);
  51. sort(Nums+1,Nums+(n+1));
  52. dfs(Nums,0,1);
  53. if (flag == 0)
  54. printf("-1\n");
  55. }
  56. }
Success #stdin #stdout 0s 4384KB
stdin
3 100
50 50 100
stdout
50 50
100