제출 #1174897

#제출 시각아이디문제언어결과실행 시간메모리
1174897Warinchai은행 (IZhO14_bank)C++20
100 / 100
92 ms8636 KiB
#include<bits/stdc++.h>
using namespace std;
int notes[25];
int ppl[25];
int mx[(1<<21)+5];
int lft[(1<<21)+5];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int n,m;cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>ppl[i];
    }
    for(int i=0;i<m;i++){
        cin>>notes[i];
    }
    for(int i=0;i<(1<<(m));i++){
        //cerr<<"i:"<<i<<"\n";
        for(int j=0;j<m;j++){
            if(((i>>j)&1)==0)continue;
            int prv=(i^(1<<j));
            //cerr<<prv<<" ";
            int val=mx[prv]+1;
            if(val>n){
                mx[i]=mx[prv];
                lft[i]=lft[prv];
                continue;
            }
            int have=lft[prv]+notes[j];
            if(have==ppl[val]){
                if(val>mx[i]){
                    mx[i]=val;
                    lft[i]=0;
                }
            }else{
                if(val-1>=mx[i]){
                    mx[i]=val-1;
                    lft[i]=have;
                }
            }
        }
        //cerr<<"\n";
        //cerr<<i<<" "<<mx[i]<<" "<<lft[i]<<"\n";
    }
    //cerr<<(1<<(m)-1)<<"\n";
    if(mx[(1<<m)-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...