Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define INF 0x3F3F3F3F
- #define DINF 1e+12
- #define rep(i, a, b) for (int i = int(a); i < int(b); i++)
- #define pb push_back
- #define debug(x) if(1) cout << #x << " = " << x << endl;
- #define debug2(x,y) if(1) cout << #x << " = " << x << " --- " << #y << " " << y << "\n";
- #define all(S) (S).begin(), (S).end()
- #define F first
- #define S second
- #define EPS 1e-9
- #define mp make_pair
- // freopen("in.txt", "r", stdin);
- // freopen("out.txt", "w", stdout);
- using namespace std;
- typedef long long ll;
- typedef pair < int, int > ii;
- int K, N;
- int v[15];
- int cnt;
- map<vector<int>, bool> m;
- void printa(int mask){
- bool fi = 1;
- vector<int> vv;
- for(int i=0; i<N; i++) if(mask&(1<<i)){
- vv.pb(v[i]);
- }
- if(!m.count(vv)){
- m[vv] = 1;
- for(int i=0; i<N; i++) if(mask&(1<<i)){
- if(!fi) printf("+");
- fi = 0;
- printf("%d", v[i]);
- }
- printf("\n");
- }
- }
- void solve(int i, int sum, int mask){
- if(sum == K){
- cnt++;
- printa(mask);
- return;
- }
- if(i == N) return;
- if(sum > K) return;
- solve(i+1, sum+v[i], mask|(1<<i));
- solve(i+1, sum, mask);
- }
- int main(){
- while(cin >> K >> N && K+N){
- m.clear();
- rep(i, 0, N) cin >> v[i];
- printf("Sums of %d:\n", K);
- cnt = 0;
- solve(0, 0, 0);
- if(!cnt) printf("NONE\n");
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement