#include <iostream>
#include <vector>
#include <unordered_set>
using namespace std;
bool solve_dp_optimized(const vector<int>& a, const vector<int>& b) {
unordered_set<int> possible_sums = {0};
for (int num : b) {
unordered_set<int> new_sums;
for (int sum : possible_sums) {
new_sums.insert(sum + num);
}
for (int sum : new_sums) {
possible_sums.insert(sum);
}
}
for (int target : a) {
if (!possible_sums.count(target)) {
return false;
}
}
return true;
}
int main() {
int n, m;
cin >> n >> m;
vector<int> a(n), b(m);
for (int &x : a) cin >> x;
for (int &x : b) cin >> x;
if (solve_dp_optimized(a, b)) cout << "YES\n";
else cout << "NO\n";
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... |