Submission #1272551

#TimeUsernameProblemLanguageResultExecution timeMemory
1272551kiteyuBank (IZhO14_bank)C++20
71 / 100
1094 ms1644 KiB
#include<bits/stdc++.h> using namespace std; using ll=long long; const int N=20; int n,m,a[N+5],b[N+5],d[N+5],qe[N+5][(1<<N)]; bool f[(1<<N)]; vector<int>g[N+5]; bool cmp(int x,int y){ return (int)g[x].size()>(int)g[y].size(); } int main(){ // freopen("bank.in","r",stdin); // freopen("bank.out","w",stdout); cin>>n>>m; for(int i=0;i<n;++i) cin>>a[i]; for(int i=0;i<m;++i)cin>>b[i]; for(int i=0;i<n;++i){ // cout<<i<<":\n"; for(int mask=1;mask<(1<<m);++mask){ int s=0; for(int j=0;j<m;++j) if(((mask>>j)&1)) s+=b[j]; if(s==a[i]){ g[i].push_back(mask); //cout<<mask<<' '; } } //cout<<'\n'; } vector<int>v(n); iota(v.begin(),v.end(),0); sort(v.begin(),v.end(),cmp); // for(int i:v) cout<<i<<' '; // cout<<'\n'; qe[0][d[0]++]=0; for(int i=0;i<n;++i){ memset(f,0,sizeof(f)); //cout<<i<<":\n"; for(int j=0;j<d[i];++j){ //cout<<qe[i][j]<<' '; for(int mask:g[v[i]]){ if(!(qe[i][j]&mask)&&!f[qe[i][j]^mask]){ f[qe[i][j]^mask]=1; qe[i+1][d[i+1]++]=(qe[i][j]^mask); if(i==n-1) return cout<<"YES",0; } } } //cout<<'\n'; } cout<<"NO"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...