Submission #362753

#TimeUsernameProblemLanguageResultExecution timeMemory
362753ritul_kr_singh은행 (IZhO14_bank)C++14
100 / 100
952 ms90732 KiB
#include <bits/stdc++.h>
using namespace std;

signed main() {
    ios_base::sync_with_stdio(false); cin.tie(nullptr);
    int n, m; cin >> n >> m;
    int a[n], b[m], pre[n+1];
    for(int& i : a) cin >> i;
    for(int& i : b) cin >> i;
    pre[0] = 0;
    for(int i=1; i<=n; ++i) pre[i] = pre[i-1]+a[i-1];
    int lim = (1<<m);
    int dp[n+1][lim];
    for(int i=0; i<lim; ++i){
        dp[0][i] = 1;
        for(int j=1; j<=n; ++j){
            dp[j][i] = 0;
        }
    }
    int ok = 0;
    int sum[lim];
    sum[0] = 0;
    for(int j=1; j<lim; ++j){
        for(int k=0; k<=m; ++k){
            if(j&(1<<k)){
                sum[j] = b[k]+sum[j-(1<<k)];
                continue;
            }
        }
    }
    for(int i=1; i<=n; ++i){
        for(int j=0; j<lim; ++j){
            if(sum[j]==pre[i]){
                for(int k=0; k<m; ++k){
                    if(j&(1<<k)){
                        if(dp[i-1][j-(1<<k)]){
                        }
                        dp[i][j] |= dp[i-1][j-(1<<k)];
                    }
                }
            }
            if(dp[i][j]){
                for(int k=0; k<m; ++k){
                    if(!(j&(1<<k))){
                        dp[i][j+(1<<k)] = 1;
                    }
                }
            }
            if(i==n) ok |= dp[i][j];

        }
    }
    cout << (ok ? "YES\n" : "NO\n");
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...