-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy path574-Sum It Up.cpp
40 lines (37 loc) · 921 Bytes
/
574-Sum It Up.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <bits/stdc++.h>
using namespace std;
bool found = false;
void dfs(int idx,vector<int>& nums,int sum,vector<int>& cur,int t){
if(sum == t){
found = true;
for(auto& v : cur){
cout << v;
if(&v == &cur.back()) cout << endl;
else cout << "+";
}
return;
}
if(idx >= nums.size() || sum > t) return;
for(int i=idx;i<nums.size();i++){
if(i>idx && nums[i] == nums[i-1]) continue;
cur.push_back(nums[i]);
dfs(i+1,nums,sum+nums[i],cur,t);
cur.pop_back();
}
}
int main()
{
int t,n,v;
while(scanf("%d %d",&t,&n),t||n){
vector<int> nums;
vector<int> cur;
for(int i=0;i<n;i++){
cin >> v;
nums.push_back(v);
}
found = false;
printf("Sums of %d:\n",t);
dfs(0,nums,0,cur,t);
if(!found) printf("NONE\n");
}
}