# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1279636 | ducanh0811 | 은행 (IZhO14_bank) | C++20 | 263 ms | 12452 KiB |
#include <bits/stdc++.h>
#define MASK(i) (1 << (i))
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; ++i)
#define REV(i, a, b) for (int i = (a), _b = (b); i >= _b; --i)
using namespace std;
int n, m;
#define MAXN 20
int a[MAXN];
int b[MAXN];
int f[MASK(MAXN)];
vector<int> cnt[20 * 1005];
bitset<MASK(MAXN)> dp[2];
void solve(){
cin >> n >> m;
FOR(i, 0, n - 1) cin >> a[i];
FOR(i, 0, m - 1) cin >> b[i];
FOR(mask, 1, MASK(m) - 1){
int bit = __builtin_ctz(mask);
f[mask] = f[mask ^ MASK(bit)] + b[bit];
cnt[f[mask]].push_back(mask);
}
dp[1][0] = 1;
FOR(i, 0, n - 1){
dp[i&1].reset();
FOR(mask, 0, MASK(m) - 1){
if (!dp[!(i&1)][mask]) continue;
for (int &x : cnt[a[i]]){
if ((x | mask) == (x ^ mask)){
dp[i&1][mask ^ x] = 1;
}
}
}
}
FOR(mask, 0, MASK(m) - 1){
if (dp[(n-1)&1][mask]){
cout << "YES";
return;
}
}
cout << "NO";
}
#define task "test"
int32_t main(){
if (fopen(task".inp","r")){
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
solve();
return 0;
}
Compilation message (stderr)
# | 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... |