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