#include <iostream>
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define N 10000
bool check(int index, int sum, int remain, int total, int n, int cs[], vector<int> &seq) {
if(sum == total)
return true;
if(index < n && sum < total && sum + remain >= total) {
int coin = cs[index];
seq.push_back(coin);
if(check(index+1, sum+coin, remain-coin, total, n, cs, seq))
return true;
seq.pop_back();
if(check(index+1, sum, remain-coin, total, n, cs, seq))
return true;
}
return false;
}
int main(int argc, char **argv) {
int n, total;
cin >> n >> total;
int cs[N] = {};
int remain = 0;
for(int i = 0; i < n; i ++) {
scanf("%d", cs+i);
remain += cs[i];
}
sort(cs, cs+n);
vector<int> seq;
bool flag = check(0, 0, remain, total, n, cs, seq);
if(flag) {
printf("%d", seq[0]);
for(int i = 1; i < seq.size(); i ++) {
printf(" %d", seq[i]);
}
}
else {
printf("No Solution");
}
cout << endl;
return 0;
}
1068. Find More Coins (30)
最新推荐文章于 2020-03-24 20:50:52 发布