제출 #1203256

#제출 시각아이디문제언어결과실행 시간메모리
1203256dungtt은행 (IZhO14_bank)C++20
71 / 100
1095 ms516 KiB
#include <bits/stdc++.h>
using namespace std;

int N, M, a[21], b[21];
vector<int> ok_masks[21];

bool backtrack(int idx, int used_mask) {
    if (idx == N) return true;
    for (int mask : ok_masks[idx]) {
        if ((mask & used_mask) == 0) {
            if (backtrack(idx + 1, used_mask | mask))
                return true;
        }
    }
    return false;
}

int main() {
    cin >> N >> M;
    for (int i = 0; i < N; ++i) cin >> a[i];
    for (int j = 0; j < M; ++j) cin >> b[j];

    // Chuẩn bị các tập con hợp lệ cho từng người
    for (int i = 0; i < N; ++i) {
        ok_masks[i].clear();
        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];
            if (sum == a[i])
                ok_masks[i].push_back(mask);
        }
    }
    // Thử mọi cách ghép tập con cho N người
    if (backtrack(0, 0))
        cout << "YES\n";
    else
        cout << "NO\n";
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...