제출 #1161141

#제출 시각아이디문제언어결과실행 시간메모리
1161141uakkesBank (IZhO14_bank)C++20
100 / 100
100 ms8644 KiB
//
// All truth are easy to understand once they are discovered.
// The point is to discover them
//
#include <bits/stdc++.h>
using namespace std;

const int N = 2e5 + 123;

void solve(){
    int n, m; cin >> n >> m;
    int a[n], b[m];
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    for (int i = 0; i < m; i++) {
        cin >> b[i];
    }

    pair<int, int> dp[1 << m];
    memset(dp, 0, sizeof(dp));

    for (int mask = 0; mask < (1 << m); mask++) {
        if (dp[mask].first == n) {
            cout << "YES";
            return;
        }
        for (int i = 0; i < m; i++) {
            if ((mask & (1 << i))) continue;

            auto [id, val] = dp[mask];
            pair<int, int> nw = dp[mask];
            if (val + b[i] == a[id]){
                ++nw.first;
                nw.second = 0;
            } else {
                nw.second += b[i];
            }
            dp[mask + (1 << i)] = max(dp[mask | (1 << i)], nw);
        }
    }

    cout << "NO";
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int tt = 1;
//    cin >> tt;

    while (tt--) {
        solve();
        cout << '\n';
    }

    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...