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