#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |