#include <bits/stdc++.h>
// Author: Kazuki_Will_Win_VOI_8703
#define fi first
#define se second
#define pii pair<int, int>
#define ll long long
#define all(a) a.begin(), a.end()
using namespace std;
const int mn = 1e6 + 5, bm = (1 << 20) + 1;
const int inf = 1e9;
int n, a[mn], m, b[mn], sum[mn], dp[mn], ok[mn];
void solve(){
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= m; i++) cin >> b[i];
for(int mask = 0; mask < (1 << m); mask++){
for(int i = 0; i < m; i++){
if(mask & (1 << i)) sum[mask] += b[i + 1];
}
}
vector <int> pre, nxt;
pre.push_back(0);
for(int i = 1; i <= n; i++){
for(auto mask : pre){
int left = ((1 << m) - 1) ^ mask;
for(int sub = left; sub; sub = (sub - 1) & left){
if(sum[sub] == a[i]){
if(!ok[mask ^ sub]){
nxt.push_back(mask ^ sub);
ok[mask ^ sub] = 1;
}
}
}
}
for(auto mask : nxt){
ok[mask] = 0;
}
pre = nxt;
nxt.clear();
if(!pre.size()){
cout << "NO\n";
return;
}
}
cout << "YES\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
while(t--) solve();
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... |