第一题:
#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;
}