#include <bits/stdc++.h>
#define int int64_t
using namespace std;
int n, m;
vector<vector<vector<int>>> pub(20);
vector<vector<int>> sub(20);
bool rec(set<int> &a, int cur){
auto y = pub[cur];
for(auto &i : y){
bool tr = false; set<int> st = a;
for(auto &j : i){
if(a.find(j) != a.end()) tr = true;
st.insert(j);
}
if(tr) continue;
if(cur == n or rec(st,cur+1)) return true;
}
return false;
}
void solve(){
cin >> n >> m;
vector<int> a(n), b(m);
for(auto &i : a) cin >> i;
for(auto &i : b) cin >> i;
for(int i = 0; i < (1LL<<m); i++){
vector<int> cur;
for(int j = 0; j < m; j++){
if(i & (1LL << j)){
cur.push_back(j);
}
}
sub.push_back(cur);
}
for(auto &i : sub){
int k = 0;
for(auto &j : i){
k += b[j];
}
for(auto &j : a){
if(j == k){
pub[j].push_back(i);
}
}
}
set<int> st;
if(rec(st,0)){
cout << "YES\n";
return;
}
cout << "NO\n";
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int _ = 1;// cin >> _; cout.tie(0);
while(_--) solve();
}
| # | 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... |