Submission #739961

#TimeUsernameProblemLanguageResultExecution timeMemory
739961ToxtaqBank (IZhO14_bank)C++17
100 / 100
128 ms2388 KiB
#include<bits/stdc++.h>
using namespace std;
int n, m;
vector<int>people, banknotes;
vector<short>table;
short rec(int indx, int mask, int cur_people){
    if(indx == n)return 1;
    if(cur_people < 0)return 0;
    if(cur_people == 0){
        indx++;
        if(indx == n)return 1;
        cur_people = people[indx];
    }
    bool res = 0;
    if(table[mask] != -1)return table[mask];
    for(int i = 0;i < m;++i){
        if(mask & (1 << i)){
            res = res | rec(indx, mask ^ (1 << i), cur_people - banknotes[i]);
        }
    }
    return table[mask] = res;
}
int main()
{
    cin >> n >> m;
    people.resize(n);
    banknotes.resize(m);
    table.assign((1 << m), -1);
    for(int i = 0;i < n;++i)cin >> people[i];
    for(int i = 0;i < m;++i)cin >> banknotes[i];
    if(rec(0, (1 << m) - 1, people[0])){
        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...