fork(1) 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 (k != tag){//
  28. if (total + Nums[k] <= target && Nums[k]>=Answer[step-1] ){
  29. tag = k;//
  30. Answer[step] = Nums[k];
  31. Taken[k] = true;
  32. dfs(Nums, total + Nums[k], step + 1);
  33. Taken[k] = false;
  34. }
  35. }
  36. }
  37. }
  38.  
  39. }
  40.  
  41.  
  42. int main()
  43. {
  44. int Nums[31];
  45. int i,j;
  46. while(scanf("%d%d",&n,&target)==2){
  47. for( i=1 ; i<=n ; i++ )
  48. scanf("%d",&Nums[i]);
  49. sort(Nums+1,Nums+(n+1));
  50. dfs(Nums,0,1);
  51. if (flag == 0)
  52. printf("-1\n");
  53. }
  54. }
Success #stdin #stdout 0s 4376KB
stdin
2 100
50 50 100
stdout
50 50
50 50