#include <bits/stdc++.h>
#define F first
#define S second
using namespace std;
int n, m;
long long salary[21], bank[21];
vector<int> ok[21];
bool dfs(int k, int mask){
bool b, res=0;
//cout<<k<<' '<<mask<<endl;
if (k>=n || salary[k]==0) return 1;
if (mask>=(1<<m)-1) return 0;
for (int i:ok[k]) {
b=1;
//cout<<i<<endl;
for (int j=0; j<m; j++){
if ((i & (1<<j)) && (mask & (1<<j))) b=0;
}
//cout<<i<<' '<<b<<' '<<c<<endl;
if (b) res=max(res, dfs(k+1, mask+i));
}
return res;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
long long c;
cin>>n>>m;
for (int i=0; i<n; i++) cin>>salary[i];
for (int i=0; i<m; i++) cin>>bank[i];
for (int i=0; i<n; i++){
for (int mask=1; mask<=(1<<m)-1; mask++){
c=0;
for (int j=0; j<m; j++) if (mask & (1<<j)) c+=bank[j];
if (c==salary[i]) ok[i].push_back(mask);
//cout<<mask<<' '<<c<<endl;
}
}
bool b=dfs(0, 0);
if (b) cout<<"YES";
else cout<<"NO";
}
# | 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... |