Submission #1325942

#TimeUsernameProblemLanguageResultExecution timeMemory
1325942marcus06Bank (IZhO14_bank)C++20
71 / 100
104 ms12056 KiB
#include <bits/stdc++.h>
using namespace std;
using lli = long long;

int f[20][1 << 20];

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

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

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

	vector <int> total(1 << m);
	for (int mask = 0; mask < (1 << m); ++mask) {
        for (int i = 0; i < m; ++i) {
            if ((mask >> i) & 1) total[mask] += b[i];
        }
	}

    int full_mask = (1 << m) - 1;
    f[0][0] = 1;
    for (int i = 0; i < n; ++i) {
        for (int mask = 0; mask < (1 << m); ++mask) {
            if (f[i][mask] == 0) continue;
            int S = full_mask ^ mask;
            for (int s = S; s > 0; s = (s - 1) & S) {
                if (total[s] == a[i]) {
                    f[i + 1][mask | s] |= f[i][mask];
                }
            }
        }
    }

    int possible = 0;
    for (int mask = 0; mask < (1 << m); ++mask) possible |= f[n][mask];
    cout << (possible ? "YES" : "NO") << '\n';
	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...