#include <bits/stdc++.h>
using namespace std;
int main(){
//freopen("1.in","r",stdin);
int n,m;
cin>>n>>m;
vector<int> salary(n),notes(m);
map<int,vector<int>> mp;
for (int i=0;i<n;i++) {
cin>>salary[i];
mp[salary[i]];
}
for (int i=0;i<m;i++) cin>>notes[i];
int total=(1<<m);
vector<int> value(total,0);
for (int mask=1;mask<total;mask++) {
int first_bit=(1 << (31 - __builtin_clz(mask)));
value[mask]=value[mask^first_bit]+notes[31-__builtin_clz(first_bit)];
if (mp.find(value[mask])!=mp.end()) {
mp[value[mask]].push_back(mask);
}
}
vector<vector<int>> dp(n+1,vector<int>(total,0));
dp[0][0]=1;
for (int i=0;i<n;i++) {
int num=salary[i];
for (int mask=0;mask<total;mask++) {
if (dp[i][mask]==0) continue;
for (int supp_mask: mp[num]) {
if (mask&supp_mask) continue;
dp[i+1][mask|supp_mask]=1;
}
}
}
int ans=count(dp[n].begin(),dp[n].end(),1);
if (ans==0) cout<<"NO\n";
else cout<<"YES\n";
}
| # | 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... |