Submission #1359873

#TimeUsernameProblemLanguageResultExecution timeMemory
1359873kantaponzBank (IZhO14_bank)C++20
100 / 100
66 ms18392 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long

const int nx = 25;

int n, m;
bool vis[23][1 << 21];
bool pos[23];
int a[nx], b[nx];
int qs[nx];

int main() {
    ios_base::sync_with_stdio(0), cin.tie(0);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        qs[i] = qs[i - 1] + a[i];
    }
    for (int i = 0; i < m; i++) cin >> b[i];

    queue<tuple<int,int,int>> q; // u, sum, bit
    q.emplace(1, 0, 0);
    vis[1][0] = 1;
    while (!q.empty()) {
        auto [u, sum, bit] = q.front();
        q.pop();
        //cout << u << " " << sum << " " << bit << "\n";
        for (int i = 0; i < m; i++) {
            if ((1 << i) & bit) continue;
            int nw = bit | (1 << i);
            
            if (sum + b[i] > qs[u]) continue;
            
            if (sum + b[i] == qs[u]) {
                pos[u] = 1;
                if (u + 1 > n) continue;
                if (vis[u + 1][nw]) continue;
                vis[u + 1][nw] = 1;
                q.emplace(u + 1, qs[u], nw);
                continue;
            }

            if (vis[u][nw]) continue;
            vis[u][nw] = 1;
            q.emplace(u, sum + b[i], nw);
        }
    
    }

    cout << (pos[n] ? "YES" : "NO");
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...