#include <bits/stdc++.h>
#define pb push_back
#define fst first
#define snd second
using namespace std;
int n, m, ans=0;
array<int,20> a, b, pf;
array<pair<int,set<int>>,20> subset;
void search(int i, int j) {
if(ans) return;
int qtd=subset[i].fst;
if(qtd==pf[i]) {
if(i==(n-1)) {
ans=1;
return;
}
subset[i+1]=subset[i];
search(i+1,0);
} else if(qtd<pf[i]) {
if(j==m) return;
search(i,j+1);
if(subset[i].snd.find(j)==subset[i].snd.end()) {
subset[i].snd.insert(j);
subset[i].fst+=b[j];
search(i,j+1);
subset[i].snd.erase(j);
subset[i].fst-=b[j];
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
for(int i=0; i<n; ++i) {
cin >> a[i];
if(!i) pf[i]=a[i];
else pf[i] = pf[i-1]+a[i];
}
for(int i=0; i<m; ++i) cin >> b[i];
if(n>m) {
cout << "NO";
return 0;
}
search(0,0);
if(ans) 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... |