Submission #1198279

#TimeUsernameProblemLanguageResultExecution timeMemory
1198279newsboyBank (IZhO14_bank)C++20
100 / 100
104 ms16784 KiB
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <set>
#include <map>
#include <numeric>
#include <iomanip>
#include <unordered_set>
#include <unordered_map>
#include <bitset>
#include <queue>
#include <deque>
#include <stack>
#include <cmath>
#include <tuple>
#include <cassert>
#include <list>
#include <random>
#include <initializer_list>
using namespace std;
using ll = long long;
using ull = unsigned long long;
using ld = long double;
constexpr ll inf = 1e18 + 10;
constexpr ll N = 1e7;
constexpr ll MIN = -inf;
constexpr ll MAX = inf;

void solve() {
    ll n, m;
    cin >> n >> m;
    vector<ll> a(n), b(m);
    for (ll i = 0; i < n; ++i) {
        cin >> a[i];
    }
    for (ll i = 0; i < m; ++i) {
        cin >> b[i];
    }
    vector<ll> p(1 << m, -1), l(1 << m, -1);
    p[0] = 0;
    l[0] = 0;
    for (ll t = 1; t < (1 << m); ++t) {
        for (ll i = 0; i < m; ++i) {
            if ((~t >> i & 1)) continue;
            ll prev = t ^ 1 << i;
            if (p[prev] == -1) continue;
            ll cur = l[prev] + b[i];
            ll target = a[p[prev]];
            if (cur < target) {
                p[t] = p[prev];
                l[t] = cur;
            }
            else if (cur == target) {
                p[t] = p[prev] + 1;
                l[t] = 0;
            }
        }
        if (p[t] == n) {
            cout << "YES\n";
            return;
        }
    }
    cout << "NO\n";
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    /*cin >> t;*/
    while (t--) {
        solve();
    }
    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...