第一题:
#include <iostream>
#include<vector>
#include<algorithm>
#include <numeric>
#include <limits>
using namespace std;
void combinationSum2DFS(vector<int> &num, int target, int start, bool &falg) {
if (target == 0) { falg = true; return; }
for (int i = start; i < num.size(); ++i) {
if (target < num[i])return;
//out.push_back(num[i]);
combinationSum2DFS(num, target - num[i], i + 1, falg);
//out.pop_back();
while (i < num.size() - 1 && num[i] == num[i + 1])i++;
if (falg == true)
return;
}
}
bool miHomeGiftBag(vector<int> &num, int target) {
bool falg = false;
vector<int> out;
sort(num.begin(), num.end());
combinationSum2DFS(num, target, 0, falg);
if (falg)
return true;
else return false;
}
int main()
{
bool res;
int _p_size = 0;
cin >> _p_size;
vector<int> _p(_p_size, 0);
int _p_item;
for (int _p_i = 0; _p_i<_p_size; _p_i++) {
cin >> _p_item;
_p[_p_i] = _p_item;
}
int _M;
cin >> _M;
res = miHomeGiftBag(_p, _M);
cout << res << endl;
return 0;
}