#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int NMAX = 20;
const int VMAX = 1000;
int n, m, maxi;
int a[NMAX + 1], b[NMAX + 1];
vector<int> v[VMAX + 1];
queue<pair<int, int>> q;
bool visited[NMAX + 1][1 << NMAX];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> a[i];
}
for(int i = 1; i <= m; i++) {
cin >> b[i];
}
maxi = *max_element(a + 1, a + n + 1);
for(int mask = 1; mask < (1 << m); mask++) {
int sum = 0;
for(int i = 1; i <= m; i++) {
if(mask >> (i - 1) & 1) {
sum += b[i];
}
}
if(sum <= maxi) {
v[sum].push_back(mask);
}
}
q.push({0, (1 << m) - 1});
visited[0][(1 << m) - 1] = 1;
while(!q.empty()) {
auto [i, mask] = q.front();
q.pop();
for(int x : v[a[i + 1]]) {
if((mask & x) == x && !visited[i + 1][mask ^ x]) {
if(i + 1 == n) {
cout << "YES\n";
return 0;
}
visited[i + 1][mask ^ x] = 1;
q.push({i + 1, mask ^ x});
}
}
}
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... |