Submission #1136395

#TimeUsernameProblemLanguageResultExecution timeMemory
1136395tsengangBank (IZhO14_bank)C++17
100 / 100
392 ms181004 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ff first
#define ss second
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define ertunt return
int main() {
    ll n, m;
    cin >> n >> m;
    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> v[n + 5];
    for (ll i = 1; i < (1 << m); i++) {
        ll cur = 0;
        for (ll j = 0; j < m; j++) {
            if (i & (1 << j)) {
                cur += b[j];
            }
        }
        for (ll j = 0; j < n; j++) {
            if (a[j] == cur) v[j].pb(i);
        }
    }
    ll dp[n + 2][(1 << m) + 4];
    memset(dp, 0, sizeof(dp));
    for (auto x : v[0]) dp[0][x] = 1;
    for (ll i = 1; i < n; i++) {
        for (ll j = 0; j < (1 << m); j++) {
            if (dp[i - 1][j] == 0) continue;
            for (auto x : v[i]) {
                if ((x & j) == 0) dp[i][x | j] = 1;
            }
        }
    }
    for (ll i = 0; i < (1 << m); i++) {
        if (dp[n - 1][i] == 1) {
            cout << "YES";
            ertunt 0;
        }
    }
    cout << "NO";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...