Submission #1159039

#TimeUsernameProblemLanguageResultExecution timeMemory
1159039ryaminty은행 (IZhO14_bank)C++17
100 / 100
103 ms8652 KiB
#include <bits/stdc++.h>
using namespace std;
using pii=pair<int, int>;

constexpr int mxN=20;
int n, m;
int a[mxN], b[mxN];
pii dp[1<<mxN];
int calc_res[1<<mxN];


int calc(int mask){
    if (calc_res[mask])
        return calc_res[mask];
    int ret=0;
    for (int i=0;i<m;++i)
        ret+=b[i]*((mask>>i)&1);
    return calc_res[mask]=ret;
}

void printt(vector<int>&v){
    for (int i:v)
        cout << i << " ";
    cout << "\n";
}

int main(){
    cin.tie(nullptr)->sync_with_stdio(false);
    cin >> n >> m;

    for (int i=0;i<n;++i)
        cin >> a[i];
    
    for (int i=0;i<m;++i)
        cin >> b[i];
    
    bool ok=false;

    for (int mask=0;mask<(1<<m);++mask){
        if (dp[mask].first==n)
            ok=true;
        for (int i=0;i<m;++i){
            if (mask&(1<<i))
                continue;
            pii p = dp[mask];
            if (dp[mask].second+b[i]==a[dp[mask].first]){
                ++p.first;
                p.second=0;
            }
            else{
                p.second+=b[i];
            }
            dp[mask+(1<<i)]=max(dp[mask+(1<<i)], p);
        }
    }

    if (ok)
        cout<<"YES";
    else
        cout<<"NO";

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...