#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair <int, int>
#define fi first
#define se second
const int MAXN = 25, POT = (1 << 20) + 5;
bool bl;
int n, arr[MAXN], br[MAXN], dp[MAXN][POT];
vector <int> v[MAXN];
void rek(int idx, int mask) {
if (idx == n) {bl = 1; return;}
if (mask == 0) return;
for (auto e : v[idx]) {
if ((mask & e) != e || dp[idx][(mask ^ e)] == 1) continue;
dp[idx][(mask ^ e)] = 1;
rek(idx + 1, (mask ^ e));
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int m;
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> arr[i];
for (int i = 0; i < m; i++) cin >> br[i];
for (int mask = 0; mask < (1 << m); mask++) {
int zb = 0;
for (int j = 0; j < m; j++) {
if (mask & (1 << j)) zb += br[j];
}
for (int j = 0; j < n; j++) {
if (zb == arr[j]) v[j].push_back(mask);
}
}
bl = 0;
rek(0, (1 << m) - 1);
if (bl == 1) cout << "YES\n";
else cout << "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... |