제출 #1261275

#제출 시각아이디문제언어결과실행 시간메모리
1261275medaaBank (IZhO14_bank)C++20
100 / 100
354 ms86780 KiB
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'

void SOLVE() {
    int n, m; cin >> n >> m;
    vector<int> a(n), b(m);
    int S = 0;
    for(auto & val : a) cin >> val, S += val;
    for(auto & val : b) cin >> val;

    vector<vector<int>> can(n);
    for(int i = 1; i < (1 << m); i++){
        int sum = 0;
        for(int j = 0; j < m; j++){
            if((i >> j) & 1) sum += b[j];
        }
        for(int j = 0; j < n; j++){
            if(a[j] == sum){
                can[j].push_back(i);
            }
        }
    }

    vector<vector<int>> dp(n, vector<int>(1 << m, -1));
    function<int(int, int)> solve =[&] (int i, int mask){
        if(i == n) return 1;
        int &ret = dp[i][mask];
        if(~ret) return ret;
        ret = 0;
        for(int m : can[i]){
            if((m & mask) == 0) ret |= solve(i + 1, mask | m);
        }
        return ret;
    };
    cout << (solve(0, 0) ? "YES" : "NO") << endl;
}
signed main(){
    ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr);
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int o_o = 1; //cin >> o_o;
    while(o_o --) SOLVE();
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...