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