Submission #1325981

#TimeUsernameProblemLanguageResultExecution timeMemory
1325981DangerNoodle7591Bank (IZhO14_bank)C++20
0 / 100
143 ms327680 KiB
#include <bits/stdc++.h>
using namespace std;
#define lalala ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
#define endl "\n"
#define N 22
#define int long long int
#define big 10000000
#define pb push_back
#define ins insert
#define f first
#define s second

int n,m;
int sal[N],bank[N];
vector<vector<int>> knap[N];

int dp[N][(1<<22)];

int coz(int i,int durum){
    if(i>=n)return 1;
    if(dp[i][durum]!=-1)return dp[i][durum];
    dp[i][durum]=0;
    for(auto u:knap[i]){
        int ok=1;
        int yeni=durum;
        for(auto x:u){
            if((yeni&(1<<x))==0){
                ok=0;break;
            }
            yeni^=(1<<x);
        }
        if(ok){
            dp[i][durum]=max(dp[i][durum],coz(i+1,yeni));
        }
    }
    return dp[i][durum];
}


signed main(){
    lalala;
    memset(dp,-1,sizeof(dp));
    cin>>n>>m;
    for(int i=0;i<n;i++)cin>>sal[i];
    for(int i=0;i<m;i++)cin>>bank[i];
    
    for(int i=1;i<(1<<(m));i++){
        int top=0;
        vector<int> v;
        for(int j=0;j<m;j++){
            if(i&(1<<j)){
                top+=bank[j];
                v.pb(j);
            }
        }
        for(int j=0;j<n;j++){
            if(top==sal[j]){
                knap[j].pb(v);
            }
        }
    }
    for(int i=0;i<n;i++){
        if(knap[i].size()==0){
            cout<<"NO"<<endl;
            return 0;
        }
    }
    if(coz(0,(1<<m)-1))cout<<"YES"<<endl;
    else 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...