Submission #1245143

#TimeUsernameProblemLanguageResultExecution timeMemory
1245143nanh0607Bank (IZhO14_bank)C++20
100 / 100
95 ms8520 KiB
#include <bits/stdc++.h>
#include <cstdlib>
using namespace std;
using ll = long long;
using str = string;
using pii = pair<int, int>;
using pil = pair<int, ll>;
using pll = pair<ll, ll>;
#define FOR(i, l, r) for (int i=l; i<=r; i++)
#define FOR2(i, l, r) for (int i=l; i>=r; i--)
#define ALL(v) v.begin(), v.end()
#define fi first
#define se second
#define ce cout << endl
#define pb push_back
#define eb emplace_back
const ll MOD = 998244353;
const int INF = 1e9;
const int LOG = 60;
const int MAX = 26;

void solve() {
    int n, m; cin >> n >> m;
    vector<int> a(n), b(m);
    FOR(i, 0, n-1) cin >> a[i];
    FOR(i, 0, m-1) cin >> b[i];

    vector<pii> dp((1 << m), {0, 0});
    // person, state

    FOR(mask, 0, (1 << m)-1) {
        if (dp[mask].fi == n) {
            cout << "YES"; return;
        }
        FOR(i, 0, m-1) {
            if (mask & (1 << i)) continue;
            pii cur = dp[mask];
            if (cur.se + b[i] == a[cur.fi]) cur = {cur.fi + 1, 0};
            else cur = {cur.fi, cur.se + b[i]};

            dp[mask | (1 << i)] = max(dp[mask | (1 << i)], cur);
        }
    }
    cout << "NO";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    // freopen("movie.in", "r", stdin);
    // freopen("movie.out", "w", stdout);
    int t = 1;
    // cin >> t;
    while (t--) solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...