제출 #1272546

#제출 시각아이디문제언어결과실행 시간메모리
1272546kiteyuBank (IZhO14_bank)C++20
71 / 100
1096 ms1648 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]; 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'; } 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[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...