#include <algorithm>
#include <iostream>
#include <random>
#include <stack>
#include <string>
#include <vector>
using namespace std;
typedef int ll;
int main() {
size_t n, m;
std::cin >> n >> m;
std::vector<int> a, b;
a.resize(n);
b.resize(m);
for (size_t i = 0; i < n; ++i) {
cin >> a[i];
}
for (size_t i = 0; i < m; ++i) {
cin >> b[i];
}
std::vector<std::vector<int>> dm(n, std::vector<int>(1 << m, false));
for (size_t i = 0; i < n; ++i) {
for (size_t mask = 0; mask < (1 << m); ++mask) {
int sum = 0;
if (i == 0) {
for (size_t j = 0; j < m; ++j) {
if (mask & (1 << j)) {
sum += b[j];
}
}
if (sum == a[i]) {
dm[i][mask] = true;
}
} else [[likely]] {
for (size_t mask2 = 0; mask2 < (1 << m); ++mask2) {
if (dm[i - 1][mask2] && (mask2 & (~mask)) == 0) {
for (size_t j = 0; j < m; ++j) {
if ((mask & (1 << j)) && !(mask2 & (1 << j))) {
sum += b[j];
}
}
}
if (sum == a[i]) {
dm[i][mask] = true;
break;
}
}
}
}
}
if (std::count(dm.back().begin(), dm.back().end(), true) == 0) {
std::cout << "NO";
} else {
std::cout << "YES";
}
}
# | 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... |