제출 #1332809

#제출 시각아이디문제언어결과실행 시간메모리
1332809coookie22gh은행 (IZhO14_bank)C++20
100 / 100
83 ms8620 KiB
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = 1e6 + 12, INF = 1e9 + 7;

int main() {
    
    int n,m;
    cin >> n >> m;
    vector <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];
    vector <pair <int, int>> dp(1 << m, {-1, -1});
    dp[0] = {0, 0};
    for (int mask = 0; mask < (1 << m); mask++) {
        if (dp[mask].first > -1) {
            int l = dp[mask].first;
            int r = dp[mask].second;
            if (l == n) {
                cout << "YES";
                return 0;
            }
            for (int i = 0; i < m; i++) {
                if (!(mask & (1 << i))) {
                    if (r + b[i] <= a[l]) {
                        pair <int, int> nv = {l, r + b[i]};
                        if (r + b[i] == a[l]) nv = {l + 1, 0};
                        if (nv > dp[mask | (1 << i)]) dp[mask | (1 << i)] = nv;
                    }
                }
            }
        }
    }
    if (dp[(1 << m) - 1].first == n) cout << "YES";
    else 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...