Submission #1146959

#TimeUsernameProblemLanguageResultExecution timeMemory
1146959bullfinch은행 (IZhO14_bank)C++20
100 / 100
91 ms16712 KiB
#include <bits/stdc++.h> 
#include <random>
#include <chrono>
#define int long long // 
#define pb push_back
#define endl '\n'

const int MOD = 1e9 + 7;
constexpr int N = 3e5 + 1;
const int inf = 1e15;
using namespace std;
 
void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    vector<int> b(m);
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < m; i++)
        cin >> b[i];
    int mx = (1 << m);
    vector<int> dp(mx, -inf);
    vector<int> dp1(mx, inf);
    dp[0] = 0;
    dp1[0] = 0;
    for (int mask = 0; mask < mx; mask++) {
        int i = dp[mask]; int y = dp1[mask];
        if (i == n) {
            cout << "YES" << endl; return;
        }
        for (int j = 0; j < m; j++) {
            int x = (1 << j);
            if ((x & mask) != 0) continue;
            if (y + b[j] == a[i]) {
                dp[(mask | x)] = dp[mask] + 1;
                dp1[(mask | x)] = 0;
            }
            else {
                dp[(mask | x)] = max(dp[(mask|x)], dp[mask]);
                dp1[(mask | x)] = min(dp1[(mask|x)], y+b[j]);
            }
        }
    }
    cout << "NO" << endl;
}








signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int z = 1;
    // cin >> z;
    while (z--) {
        solve();
        cerr << "-----" << endl;
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...