Submission #880639

#TimeUsernameProblemLanguageResultExecution timeMemory
880639anton은행 (IZhO14_bank)C++17
100 / 100
358 ms18968 KiB
#include<bits/stdc++.h>

using namespace std;
#define int long long

int n, m;
const int MAX_N = 20;
const int MAX_M = 20;

int a[MAX_N], b[MAX_M];

bool dp[MAX_N][(1<<MAX_M)];

signed main(){
    cin>>n>>m;
    vector<vector<int>> oc(n);

    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<(1<<m); i++){
        int s= 0;
        for(int k = 0; k<m; k++){
            if((i&(1<<k)) != 0){
                s+= b[k];
            }
        }


        for(int j = 0; j<n; j++){
            if(a[j] == s){
                oc[j].push_back(i);
            }
        }
    }

    for(auto e: oc[0]){
        dp[0][e] = true;
    }

    for(int i = 1; i<n; i++){
        for(int j = 0; j<(1<<m); j++){
            if(dp[i-1][j]){
                for(auto v: oc[i]){
                    if((j&v) == 0){
                        dp[i][j|v] = true; 
                    }
                }
            }
        }
    }

    for(int j = 0; j<(1<<m); j++){
        if(dp[n-1][j]){
            cout<<"YES"<<endl;
            return 0;
        }
        
    }

    cout<<"NO"<<endl;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...