제출 #1361147

#제출 시각아이디문제언어결과실행 시간메모리
1361147nikolashamiBank (IZhO14_bank)C++20
100 / 100
88 ms16828 KiB
#include<bits/stdc++.h>
using namespace std;
using ll=long long;

const ll N=20;
ll a[N],b[N],n,m;
ll f[(1<<N)],g[(1<<N)];

signed main(){
    cin>>n>>m;
    for(int i=0;i<n;++i)
        cin>>a[i];
    for(int i=0;i<m;++i)
        cin>>b[i];

    fill(f,f+(1<<m),-1);
    f[0]=0;

    for(int msk=1;msk<(1<<m);++msk){
        for(int i=0;i<m;++i){
            if(!(msk&(1<<i)))continue;
            int msp=msk^(1<<i);
            if(f[msp]==-1)continue;
            if(g[msp]+b[i]==a[f[msp]]){
                if(f[msp]+1>f[msk]){
                    f[msk]=f[msp]+1;
                    g[msk]=0;
                }
            }else if(g[msp]+b[i]<a[f[msp]]&&f[msp]>f[msk]){
                f[msk]=f[msp];
                g[msk]=g[msp]+b[i];
            }
        }
    }

    bool ok=0;
    for(int msk=0;msk<(1<<m);++msk)
        ok|=(f[msk]==n);

    cout<<(ok?"YES":"NO");
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…