数据范围没那么大,可以直接二叉递归求和;

void dfs(int l, vector<int> vec) {
    if (l == vec.size()) {
        if (sum == subtract)flag = 1;
        return;
    }
    sum += vec[l];
    dfs(l + 1, vec);
    sum -= vec[l];
    sum -= vec[l];
    dfs(l + 1, vec);
    sum += vec[l];
}

alt