fork download
  1. #include <iostream>
  2. using namespace std;
  3. #include<algorithm>
  4. #include<vector>
  5. #include<set>
  6. #include<map>
  7. #define Fast ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  8. #define ll long long
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. void solve(const vector<int>& nums, int size, int t,
  16. int idx, int sum, vector<int> holder,
  17. set<vector<int>>& ans) {
  18. if (sum == t) {
  19. ans.insert(holder);
  20. return;
  21. }
  22. if (idx == size) {
  23. return;
  24. }
  25. solve(nums, size, t, idx + 1, sum, holder, ans);
  26. holder.push_back(nums[idx]);
  27. solve(nums, size, t, idx + 1, sum + nums[idx], holder, ans);
  28. }
  29.  
  30. void sumitup() {
  31. multimap<int, set<vector<int>>> mp;
  32. while (true) {
  33. int t, size; cin >> t >> size;
  34. if (size == 0) {
  35. break;
  36. }
  37. vector<int> nums(size);
  38. for (int i = 0; i < size; i++) {
  39. cin >> nums[i];
  40. }
  41. set<vector<int>> ans;
  42.  
  43. vector<int> current;
  44. solve(nums, size, t, 0, 0, current, ans);
  45. mp.insert({ t, ans });
  46. }
  47.  
  48. for (const auto& kv : mp) {
  49. const int T = kv.first;
  50. const auto& sums = kv.second;
  51.  
  52. cout << "Sums of " << T << ":\n";
  53.  
  54. if (sums.empty()) {
  55. cout << "NONE\n";
  56. continue;
  57. }
  58.  
  59. for (auto it = sums.rbegin(); it != sums.rend(); ++it) {
  60. const auto& v = *it;
  61. for (size_t i = 0; i < v.size(); ++i) {
  62. if (i) cout << "+";
  63. cout << v[i];
  64. }
  65. cout << "\n";
  66. }
  67. }
  68. }
  69. int main() {
  70. Fast;
  71. int t = 1;
  72.  
  73. while (t--) {
  74. sumitup();
  75. }
  76. return 0;
  77. }
Success #stdin #stdout 0s 5320KB
stdin
Standard input is empty
stdout
Standard output is empty