• Source
    1. #include<bits/stdc++.h>
    2.  
    3. using namespace std;
    4.  
    5. vector<int>result,tracks;
    6.  
    7. int arr[25],sum,n,t,mx;
    8.  
    9. void backtracking(int start)
    10. {
    11. if(sum>mx)
    12. {
    13. tracks = result;
    14.  
    15. mx = sum ;
    16. }
    17.  
    18.  
    19. for(int i=start; i<=t; i++)
    20. {
    21. if(arr[i]+sum <= n)
    22. {
    23. result.push_back(arr[i]);
    24.  
    25. sum += arr[i];
    26.  
    27. backtracking(i+1);
    28.  
    29. sum -= arr[i];
    30.  
    31. result.pop_back();
    32. }
    33.  
    34. }
    35. }
    36.  
    37. int main()
    38. {
    39. int i,sum1;
    40.  
    41. while(scanf("%d%d",&n,&t)==2)
    42. {
    43. for(i=1; i<=t; i++)
    44. {
    45. scanf("%d",&arr[i]);
    46. }
    47.  
    48. sum = 0;
    49.  
    50. sum1 = 0;
    51.  
    52. mx = 0;
    53.  
    54. backtracking(1);
    55.  
    56. for(i=0; i<tracks.size(); i++)
    57. {
    58. printf("%d ",tracks[i]);
    59.  
    60. sum1+=tracks[i];
    61. }
    62.  
    63. printf("sum:%d\n",sum1);
    64.  
    65. result.clear();
    66.  
    67. tracks.clear();
    68. }
    69.  
    70. return 0;
    71. }