Submission #1265196

#TimeUsernameProblemLanguageResultExecution timeMemory
1265196vk3601hBank (IZhO14_bank)C++20
100 / 100
93 ms8520 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int people_num, notes_num;
    cin >> people_num >> notes_num;

    vector<int> salaries(people_num), banknotes(notes_num);
    for (int i = 0; i < people_num; ++i) cin >> salaries[i];
    for (int i = 0; i < notes_num; ++i) cin >> banknotes[i];

    vector<pair<int, int>> dp(1 << notes_num, {-1, -1});
    dp[0] = {0, 0};
    for (int mask = 1; mask < (1 << notes_num); ++mask){
        for (int last = 0; last < notes_num; ++last){
            if (!(mask & (1 << last))) continue;

            int prev = mask ^ (1 << last);
            if (dp[prev].first == -1) continue;

            int new_amt = dp[prev].second + banknotes[last];
            int curr_target = salaries[dp[prev].first];

            if (new_amt < curr_target){
                dp[mask].first = dp[prev].first;
                dp[mask].second = new_amt;
            }
            else if (new_amt == curr_target){
                dp[mask].first = dp[prev].first + 1;
                dp[mask].second = 0;
            }
        }

        if (dp[mask].first == people_num){
            cout << "YES";
            return 0;
        }
    }

    cout << "NO";
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...