#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
void SOLVE() {
int n, m; cin >> n >> m;
vector<int> a(n), b(m);
int S = 0;
for(auto & val : a) cin >> val, S += val;
for(auto & val : b) cin >> val;
vector<vector<int>> can(n);
for(int i = 1; i < (1 << m); i++){
int sum = 0;
for(int j = 0; j < m; j++){
if((i >> j) & 1) sum += b[j];
}
for(int j = 0; j < n; j++){
if(a[j] == sum){
can[j].push_back(i);
}
}
}
vector<vector<int>> dp(n, vector<int>(1 << m, -1));
function<int(int, int)> solve =[&] (int i, int mask){
if(i == n) return 1;
int &ret = dp[i][mask];
if(~ret) return ret;
ret = 0;
for(int m : can[i]){
if((m & mask) == 0) ret |= solve(i + 1, mask | m);
}
return ret;
};
cout << (solve(0, 0) ? "YES" : "NO") << endl;
}
signed main(){
ios_base::sync_with_stdio(false); cout.tie(nullptr); cin.tie(nullptr);
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
int o_o = 1; //cin >> o_o;
while(o_o --) 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... |