#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
#define nl "\n"
#define sp " "
#define name "test"
#define int long long
int n, m;
int a[21], b[21];
bool rec(int idN, int idM, int mask, int mask2){
if(idM == m){
int tmp = 0;
for(int i = 0; i<m; i++){
if(mask & (1<<i) && !(mask2 & (1<<i)) ) tmp += b[i];
}
if(tmp == a[idN]){
if(idN == n-1) return 1;
return rec(idN+1, 0, 0, mask2 | mask);
} return 0;
}
bool opt = rec(idN, idM+1, mask, mask2);
bool opt2;
if( !(mask2 & (1<<idM)) ) opt2 = rec(idN, idM+1, mask | (1<<idM), mask2);
return max(opt, opt2);
}
void sub(){
if(rec(0, 0, 0, 0)) cout << "YES";
else cout << "NO";
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
//freopen(name".INP", "r", stdin);
//freopen(name".OUT", "w", stdout);
cin >> n >> m;
for(int i = 0; i<n; i++) cin >> a[i];
for(int j = 0; j<m; j++) cin >> b[j];
sub();
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... |