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