제출 #1306589

#제출 시각아이디문제언어결과실행 시간메모리
1306589Nipphitch은행 (IZhO14_bank)C++20
52 / 100
1097 ms6436 KiB
#include <bits/stdc++.h>
using namespace std;
const int N=20;

int n,m,a[N+1],b[N+1],sum[(1<<N)+1];
bool dp1[(1<<N)+1],dp2[(1<<N)+1],ans;

signed main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    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 mask=0;mask<(1<<m);mask++){
        for(int i=0;i<m;i++) if(mask&(1<<i)) sum[mask]+=b[i];
    }
    memset(dp1,true,sizeof(dp1));
    for(int i=0;i<n;i++){
        memset(dp2,false,sizeof(dp2));
        for(int mask=0;mask<(1<<m);mask++){
            for(int sub=mask;sub;sub=(sub-1)&mask){
                int oth=mask^sub;
                if(!dp1[mask] || sum[sub]!=a[i]) continue;
                dp2[oth]=true;
            }
        }
        swap(dp1,dp2);
    }
    for(int mask=0;mask<(1<<n);mask++) ans|=dp1[mask];
    if(ans) cout << "YES";
    else cout << "NO";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...