Submission #1306663

#TimeUsernameProblemLanguageResultExecution timeMemory
13066631anBank (IZhO14_bank)C++20
100 / 100
91 ms8624 KiB
#include <bits/stdc++.h>

using namespace std;

int main () {
    int n, m;
    cin >> n >> m;

    vector<int> works(n), ps(n), notes(m);
    for (int i = 0; i < n; i++) {
        cin >> works[i];
        ps[i] = works[i];

        if (i != 0)
            ps[i] += works[i - 1];
    }

    for (int i = 0; i < m; i++)
        cin >> notes[i];

    vector<pair<int, int>> dp(1 << m, {-1, -1});
    dp[0] = {0, 0};

    for (int mask = 0; mask < (1 << m); mask++) {
        if (dp[mask].first == -1)
            continue;

        if (dp[mask].first == n) {
            printf("YES\n");
            return 0;
        }

        for (int i = 0; i < m; i++) {
            if (mask & (1 << i))
                continue;

            int payment = dp[mask].second + notes[i];

            if (payment == works[dp[mask].first]) {
                dp[mask | (1 << i)] = max(dp[mask | (1 << i)], {dp[mask].first + 1, 0});
            } else if (payment < works[dp[mask].first]) {
                dp[mask | (1 << i)] = max(dp[mask | (1 << i)], {dp[mask].first, payment});
            }
        }
    }

    printf("NO\n");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...