#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve() {
int n, m;
cin >> n >> m;
vector<int> a(n), b(m);
for (int &x : a) cin >> x;
for (int &x : b) cin >> x;
// все подмножества b
vector<pair<int,int>> subs; // {sum, mask}
for (int mask = 1; mask < (1 << m); mask++) {
int sum = 0;
for (int j = 0; j < m; j++)
if (mask & (1 << j)) sum += b[j];
subs.push_back({sum, mask});
}
// сгруппируем по сумме
unordered_map<int, vector<int>> by_sum;
for (auto [s, mask] : subs) by_sum[s].push_back(mask);
// DP: возможные наборы масок b
set<int> cur;
cur.insert(0); // пустое множество
for (int need : a) {
set<int> nxt;
for (int mask : by_sum[need]) {
for (int used : cur) {
if ((used & mask) == 0) {
nxt.insert(used | mask);
}
}
}
cur.swap(nxt);
}
cout << (cur.empty() ? "NO\n" : "YES\n");
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}
# | 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... |