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