Submission #1344916

#TimeUsernameProblemLanguageResultExecution timeMemory
1344916Huseyn123Bank (IZhO14_bank)C++20
100 / 100
79 ms16844 KiB
#include <bits/stdc++.h>
#define MAX 21
#define int long long
#define MOD 1000000007
#define INF LLONG_MAX
using namespace std;
inline void USACO(string filename){
    freopen((filename + ".in").c_str(), "r", stdin);
    freopen((filename + ".out").c_str(), "w", stdout);
}
int dp[1<<20],dp2[1<<20];
int a[MAX],b[MAX];
int n,m;
void solve(){
    cin >> n >> m;
    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<<20);i++){
        dp[i]=-1;
    }
    dp[0]=0;
    for(int i=0;i<(1<<m);i++){
        for(int j=0;j<m;j++){
            if((i&(1<<j))){
                int cur=(i^(1<<j));
                if(dp[cur]==-1){
                    continue;
                }
                if(dp[cur]==n){
                    dp[i]=n;
                }
                else if(dp2[cur]+b[j]==a[dp[cur]]){
                    if(dp[cur]+1>dp[i]){
                        dp[i]=dp[cur]+1;
                        dp2[i]=0;
                    }
                }
                else{
                    if(dp[cur]>dp[i]){
                        dp[i]=dp[cur];
                        dp2[i]=dp2[cur]+b[j];
                    }
                }
            }
        }
        if(dp[i]==n){
            cout << "YES" << "\n";
            return;
        }
    }
    cout << "NO" << "\n";
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t=1;
    //cin >> t;
    //USACO("cbarn2");
    while(t--){
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...