제출 #1215159

#제출 시각아이디문제언어결과실행 시간메모리
1215159sakura은행 (IZhO14_bank)C++20
71 / 100
1095 ms580 KiB
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;

int N, M;
vector<int> a, b;
vector<vector<int>> salarySubsets;
bool success = false;

void dfs(int idx, int usedMask) {
    if (idx == N) {
        success = true;
        return;
    }
    for (int mask : salarySubsets[idx]) {
        if ((usedMask & mask) == 0)
            dfs(idx + 1, usedMask | mask);
        if (success) return;
    }
}

int main() {
    cin >> N >> M;
    a.resize(N);
    b.resize(M);
    for (int &x : a) cin >> x;
    for (int &x : b) cin >> x;

    salarySubsets.resize(N);
    for (int mask = 0; mask < (1 << M); ++mask) {
        int sum = 0;
        for (int j = 0; j < M; ++j)
            if (mask & (1 << j))
                sum += b[j];
        for (int i = 0; i < N; ++i)
            if (sum == a[i])
                salarySubsets[i].push_back(mask);
    }

    dfs(0, 0);
    cout << (success ? "YES" : "NO") << endl;
    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...