Submission #1280641

#TimeUsernameProblemLanguageResultExecution timeMemory
1280641efegBank (IZhO14_bank)C++20
100 / 100
324 ms20648 KiB
#include <bits/stdc++.h>
using namespace std;

#define F first
#define S second
#define ll long long
#define pb push_back
#define pqueue priority_queue

typedef vector<int> vi;
typedef pair<int,int> ii;
typedef tuple<int,int,int> iii; 
typedef vector<ii> vii; 
const int maxN = 1e6; 


bool dp[30][1 << 22]; 

int main(){
    ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); 

    int n,m; cin >> n >> m; 
    vi salary(n);
    vi banknote(m);
    for (int i = 0; i < n; i++) cin >> salary[i];
    for (int i = 0; i < m; i++) cin >> banknote[i];
    
    vector<vi> maskforsalary(1100); 

    
    for (int mask = 0; mask < (1 << m); mask++){
        int r = 0; 
        for (int j = 0; j < m; j++){
            if (mask & (1 << j)) r += banknote[j]; 
        }
        if (r > 1000) continue;
        maskforsalary[r].pb(mask); 
    }
    
    dp[0][0] = true; 

    for (int i = 0; i < n; i++){
        for (int mask = 0; mask < (1 << m); mask++){
            if (!dp[i][mask]) continue; 
            for (auto x : maskforsalary[salary[i]]){
                if ((mask & x) == 0){
                    dp[i+1][mask | x] = true; 
                }
            }
        }
    }

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

    cout << "NO" << endl; 
    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...