제출 #1196420

#제출 시각아이디문제언어결과실행 시간메모리
1196420mkrtich_2010_은행 (IZhO14_bank)C++20
71 / 100
1101 ms166916 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main(){
    int n, m; cin>>n>>m;
    vector<int> a(n);
    vector<int> b(m);
    vector<vector<int>> dp(1<<m, vector<int>(n));
    for(int i = 0; i < n; i++) cin>>a[i];
    for(int i = 0; i < m; i++) cin>>b[i];
    vector<vector<int>> c(1001);
    for(int i = 0; i < (1<<m); i++){
        int sum = 0;
        for(int j = 0; j < m; j++){
            if(i&(1<<j)){
                sum += b[j];
            }
            if(sum <= 1000) c[sum].push_back(i);
        }
    }
    for(auto i : c[a[0]]){
        dp[i][0] = 1;
    }
    for(int i = 0; i < (1<<m); i++){
        for(int j = 0; j < n-1; j++){
            if(dp[i][j] == 0) continue;
            for(int k : c[a[j+1]]){
                if(i & k) continue;
                dp[i | k][j+1] = 1;
            }
        }
        if(dp[i][n-1] == 1){
            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...