This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#define FOR(i,a) for(int i=0;i<(a);i++)
#define FORE(i,a,b) for(int i=(a);i<(b);i++)
typedef long long ll;
#define pb push_back
#define se second
#define fi first
#define all(x) x.begin(),x.end()
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pii> vii;
typedef vector<bool> vb;
typedef vector<ll> vll;
#define mid (l+r)/2
#define alt cout<<endl
const int MAXN=25;
const int INF=1e9;
int32_t main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
//ifstream cin ("movie.in");
//ofstream cout ("movie.out");
int n,m;
cin>>n>>m;
vi dp (1<<m);
multiset<int> people;
vi money(m+1);
FOR(i,n){
int el;
cin>>el;
people.insert(el);
}
FORE(i,1,m+1){
cin>>money[i];
}
vb used(m+1,false);
int cnt=0;
dp[0]=0;
FOR(i,m){
dp[1<<i]=money[i+1];
if(people.count(money[i+1])){
people.erase(people.find(money[i+1]));
used[i]=true;
cnt++;
}
}
bool valid;
vi eleman;
FORE(s,1,(1<<m)){
if(__builtin_popcount(s)==1) continue;
valid=true;
FOR(j,m){ //if j.bit is used
if(s & (1<<j)){
if(used[j]){
valid=false;
}
dp[s]+=dp[j+1];
eleman.pb(j+1);
}
}
if(valid and people.count(dp[s])){
people.erase(people.find(dp[s]));
for(auto el:eleman){
//cout<<el<<' ';
used[el]=true;
}
//alt;
cnt++;
}
eleman.clear();
}
if(cnt==n) 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... |