Submission #873853

#TimeUsernameProblemLanguageResultExecution timeMemory
873853AlphaMale06Bank (IZhO14_bank)C++14
19 / 100
83 ms8508 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = 20;

int dp[1<<N], rest[1<<N];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int n, m;
    cin >> n >> m;
    int a[n];
    for(int i=0; i< n; i++)cin >> a[i];
    int b[m];
    for(int i=0; i < m; i++)cin >> b[i];
    int mask=1<<m;
    rest[0]=a[0];
    for(int i=1; i<mask; i++){
        int bestdp=0;
        int bestrest=10000;
        for(int j=0; j< m; j++){
            int bit=1<<j;
            if(i&bit){
                if(rest[i^bit]==b[j]){
                    if(bestdp<=dp[i^bit]){
                        bestdp=dp[i^bit]+1;
                        if(bestdp==n){
                            cout << "YES\n";
                            return 0;
                        }
                        else{
                            bestrest=a[bestdp];
                        }
                    }
                }
                else{
                    if(bestdp==dp[i^bit]){
                        if(rest[i^bit]-b[j]>0)bestrest=min(bestrest, rest[i^bit]-b[j]);
                    }
                }
            }
        }
        dp[i]=bestdp;
        rest[i]=bestrest;
    }
    if(dp[mask-1]==n)cout << "YES\n";
    else 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...