Submission #965493

#TimeUsernameProblemLanguageResultExecution timeMemory
9654930x34cBank (IZhO14_bank)C++17
19 / 100
115 ms16868 KiB
#include <bits/stdc++.h>
#define ll long long
#define pii pair<int, int>
#define endl '\n'
#define int ll

using namespace std;

signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int N, M;
    cin >> N >> M;

    vector<int> ppl(N + 1), mny(M);
    for(int i = 0; i < N; i++)
        cin >> ppl[i];
    ppl[N] = numeric_limits<int>::max();
    
    for(int j = 0; j < M; j++)
        cin >> mny[j];

    vector<int> pref_sol(1 << M, -1);
    vector<int> cur_sol(1 << M, 0);
    pref_sol[0] = 0;

    for(int mask = 1; mask < (1 << M); mask++) {
        for(int pick = 0; pick < M; pick++) {
            int prev = mask & (~(1 << pick));
            
            if(mask == prev) continue;
            if(pref_sol[prev] == -1)
                continue;
            
            if(cur_sol[prev] + mny[pick] > ppl[pref_sol[prev]])
                continue;
            else if(cur_sol[prev] + mny[pick] < ppl[pref_sol[prev]]) {
                cur_sol[mask] += mny[pick];
                pref_sol[mask] = pref_sol[prev];
            }
            else {
                cur_sol[prev] += mny[pick];
                pref_sol[mask] = 1 + pref_sol[prev];
            }
        }
    }

    if(pref_sol[(1 << M) - 1] == N) {
        cout << "YES" << endl;
    }
    else cout << "NO" << endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...