#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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |