Submission #1326158

#TimeUsernameProblemLanguageResultExecution timeMemory
1326158pfangBank (IZhO14_bank)C++20
0 / 100
1 ms332 KiB
#include <bits/stdc++.h>
using namespace std;

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);

    int N, M;
    cin >> N >> M;

    vector<int> a(N), b(M);
    long long sum_a = 0, sum_b = 0;

    for(int i = 0; i < N; i++){
        cin >> a[i];
        sum_a += a[i];
    }

    for(int i = 0; i < M; i++){
        cin >> b[i];
        sum_b += b[i];
    }

    // Necessary condition
    if(sum_a != sum_b){
        cout << "NO";
        return 0;
    }

    // Prefix sums of salaries
    vector<int> pref(N + 1, 0);
    for(int i = 0; i < N; i++){
        pref[i + 1] = pref[i] + a[i];
    }

    // Precompute subset sums
    vector<int> sum(1 << M, 0);
    for(int mask = 1; mask < (1 << M); mask++){
        int l = mask & -mask;
        int j = __builtin_ctz(l);
        sum[mask] = sum[mask ^ l] + b[j];
    }

    vector<int> dp(1 << M, -1);
    dp[0] = 0;

    for(int mask = 0; mask < (1 << M); mask++){
        if(dp[mask] == -1) continue;

        int k = dp[mask];
        if(k == N) continue;

        int current_sum = sum[mask];
        int filled = current_sum - pref[k];

        for(int j = 0; j < M; j++){
            if(!(mask & (1 << j))){
                int next_fill = filled + b[j];
                if(next_fill > a[k]) continue;

                int new_mask = mask | (1 << j);

                if(next_fill == a[k])
                    dp[new_mask] = max(dp[new_mask], k + 1);
                else
                    dp[new_mask] = max(dp[new_mask], k);
            }
        }
    }

    // Since total sums match, we must use all notes
    int full_mask = (1 << M) - 1;
    cout << (dp[full_mask] == N ? "YES" : "NO");

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