Submission #1326148

#TimeUsernameProblemLanguageResultExecution timeMemory
1326148Godgift42Bank (IZhO14_bank)C++20
100 / 100
96 ms8612 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin >> n;
    int m;
    cin >> m;
    vector<int> a(n);
    for(int i=0;i<n;i++)cin >> a[i];
    
    vector<int> b(m);
    for(int i=0;i<m;i++)cin >> b[i];
    int bt=1<<m;
    vector<int> dp(bt,-1);
    vector<int> lft(bt,-1);
    dp[0]=0;
    lft[0]=0;
    for(int i=1;i<bt;i++){
        for(int j=0;j<m;j++){
            if(((1<<j)&i)>0){
                if(dp[i^(1<<j)]!=-1){
                    if(lft[i^(1<<j)]+b[j]<a[dp[i^(1<<j)]]){
                        dp[i]=dp[i^(1<<j)];
                        lft[i]=lft[i^(1<<j)]+b[j];
                    }
                    else if(lft[i^(1<<j)]+b[j]==a[dp[i^(1<<j)]]){
                        dp[i]=dp[i^(1<<j)]+1;
                        lft[i]=0;
                        break;
                    }
                }
            }
        }
        if(dp[i]==n){
            cout << "YES\n";
            return 0;
        }
    }
    cout << "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...