#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ll long long
#define lint long long int
#define debugi(i, f) cerr << "i = " << i << " : f[i] = " << f[i] << "\n";
#define debugii(i, j, f) cerr << "i = " << i << " and j = " << j << " : f[i][j] = " << f[i][j] << "\n";
#define debugiii(i, j, k, f) cerr << "i = " << i << " and j = " << j << " and k = " << k << " : f[i][j][k] = " << f[i][j][k] << "\n";
#define vc vector
#define pr pair
#define ii pair<int, int>
#define iii pair<int, ii>
#define fi first
#define se second
#define Pi 3.1415926535897932384
#define FOR(i, a, b) for (int i = (a); i <= (b); i++)
#define FORD(i, a, b) for (int i = (a); i >= (b); i--)
const ll mod = 1e9 + 7;
const int MOD = 2e9 + 33;
const int N = 5e5 + 2;
const int modd = 998244353;
const int inf = (int)1e18;
string decToBinary(int n, int sz) {
string bin = "";
if (!n) bin.push_back('0');
while (n > 0) {
int bit = n%2;
bin.push_back('0' + bit);
n /= 2;
}
for (int i = bin.size() - 1; i < sz; i++) {
bin.push_back('0');
}
reverse(bin.begin(), bin.end());
return bin;
}
string decToBinary2(int n) {
string bin = "";
while (n > 0) {
int bit = n%2;
bin.push_back('0' + bit);
n /= 2;
}
reverse(bin.begin(), bin.end());
return bin;
}
int n, m;
int a[22], b[22], dp[20][(1 << 20) + 2];
bool mark[1002];
vc<int> subset[1002];
void runcase (int test) {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> a[i];
mark[a[i]] = true;
}
for (int i = 1; i <= m; i++) {
cin >> b[i];
}
for (int s = 0; s < (1 << n); s++) {
int sum = 0;
for (int mask = 0; mask < n; mask++) {
if (s & (1 << mask)) {
sum += b[mask + 1];
}
}
if (mark[sum])
subset[sum].push_back(s);
}
memset(dp[1], true, sizeof dp[1]);
for (int i = 1; i < n; i++) {
for (int s = 0; s < (1 << n); s++) {
if (dp[i][s] == false) continue;
for (int x : subset[a[i]]) {
if ((s | x) == x) {
dp[i + 1][s ^ x] = true;
}
}
}
}
cout << (*max_element(dp[n], dp[n] + 1) == true ? "YES" : "NO") << '\n';
}
/**
B1 : kiểm tra lại code templete, code đã học thuộc
đọc kĩ đề
nháp chưa
kiểm tra lại code, đặc biệt là những chỗ đã học thuộc (nhiều khi sai ở đó)
**/
signed main () {
ios_base::sync_with_stdio (false);
cin.tie (0); cout.tie (0);
#ifndef ONLINE_JUDGE
// freopen ("movie.in", "r", stdin);
// freopen ("movie.out", "w", stdout);
#else // online submission
#endif
/// i have a contest soon and i need to learn a much as possible
/// so let become familiar with a bunch of different problems and solution ideas
// stop learning useless algorithm (with you) and solve more problems
//Cứ 7 lần nộp thì chỉ được 1 lần sai
int test = 1;
// cin >> test;
while (test--) runcase(test);
// 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... |