제출 #434621

#제출 시각아이디문제언어결과실행 시간메모리
434621fvogel499은행 (IZhO14_bank)C++14
100 / 100
135 ms8552 KiB
/*
File created on 06/21/2021 at 14:51:13.
Link to problem: https://oj.uz/problem/view/IZhO14_bank
Description: 
Time complexity: O()
Space complexity: O()
Status: DEV
Copyright: Ⓒ 2021 Francois Vogel
*/

#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <functional>

using namespace std;
using namespace __gnu_pbds;

#define pii pair<int, int>
#define f first
#define s second

#define pb push_back
#define ins insert
#define cls clear

#define ll long long

typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> ordered_set;

const int siz = 20;

int nbPeople, nbBanknotes;
int people [siz];
int banknotes [siz];
int lp [1<<siz];
int lft [1<<siz];

void dp(int x) {
    if (lp[x] != -2) return;
    lp[x] = -1;
    lft[x] = 0;
    for (int i = 0; i < nbBanknotes; i++) if ((x>>i)&1) {
        int nx = x&~(1<<i);
        dp(nx);
        int locPref = lp[nx];
        int locLeft = lft[nx]+banknotes[i];
        if (locPref+1 < nbPeople and locLeft == people[locPref+1]) {
            locPref++;
            locLeft = 0;
        }
        if (locPref > lp[x] or (locPref == lp[x] and locLeft > lft[x])) {
            lp[x] = locPref;
            lft[x] = locLeft;
        }
    }
}

signed main() {
    cin.tie(0);
    // ios_base::sync_with_stdio(0);

    cin >> nbPeople >> nbBanknotes;
    for (int i = 0; i < nbPeople; i++) cin >> people[i];
    for (int i = 0; i < nbBanknotes; i++) cin >> banknotes[i];
    for (int i = 0; i < (1<<nbBanknotes); i++) lp[i] = -2;
    for (int i = 0; i < (1<<nbBanknotes); i++) {
        dp(i);
        if (lp[i] == nbPeople-1) {
            cout << "YES";
            return 0;
        }
    }
    cout << "NO";

    int d = 0;
    d++;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...