#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll N, M;
vector<ll> a, b;
map<vector<ll>, bool> vis;
bool ans = false;
void BT(vector<ll> v, ll mx){
if(vis[v]){return;}
vis[v] = true;
if(v.size() == M){
vector<ll> s(mx, 0);
for(ll i=0;i<M;i++){
s[v[i]] += b[i];
}
sort(s.begin(), s.end());
if(mx < N){return;}
ll cnt = 0;
for(ll i=0;i<mx;i++){
if(cnt<N and s[i] == a[cnt]){cnt++;}
}
if(cnt == N){ans = true;}
//for(ll x : s){cout<<x<<" ";} cout<<endl;
} else {
for(ll i=0;i<mx;i++){
v.push_back(i);
BT(v, mx);
v.pop_back();
}
v.push_back(mx);
BT(v, mx+1);
v.pop_back();
}
}
int main() {
cin>>N>>M;
a.resize(N);
b.resize(M);
for(ll i=0;i<N;i++){cin>>a[i];}
for(ll i=0;i<M;i++){cin>>b[i];}
sort(a.begin(), a.end());
BT({}, 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... |