Submission #1228626

#TimeUsernameProblemLanguageResultExecution timeMemory
1228626chithanhnguyenBank (IZhO14_bank)C++20
100 / 100
98 ms8644 KiB
#include <bits/stdc++.h>
using namespace std;

#define BIT(x, i) ((x >> i) & 1)

int n, m, a[20], b[20], dp1[1 << 20], dp2[1 << 20];
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(nullptr); cout.tie(nullptr);

    cin >> n >> m;
    for (int i = 0; i < n; ++i) cin >> a[i];
    for (int i = 0; i < m; ++i) cin >> b[i];

    memset(dp1, -1, sizeof dp1);
    memset(dp2, -1, sizeof dp2);

    dp1[0] = 0; dp2[0] = 0;

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

            int prevmask = mask & ~(1 << i);
            if (dp2[prevmask] == -1) continue;

            int t = dp1[prevmask] + b[i];
            int target = a[dp2[prevmask]];

            if (t < target) {
                dp2[mask] = dp2[prevmask];
                dp1[mask] = t;
            } else if (t == target) {
                dp2[mask] = dp2[prevmask] + 1;
                dp1[mask] = 0;
            }
        }

        if (dp2[mask] == n) {
            cout << "YES";
            return 0;
        }
    }

    cout << "NO";

    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...