Submission #794965

#TimeUsernameProblemLanguageResultExecution timeMemory
794965nguyenneheheBank (IZhO14_bank)C++14
19 / 100
55 ms12616 KiB
#include<bits/stdc++.h> using namespace std; const int N = 20; int n, m, a[N], b[N]; void sub1() { bool ok = false; for (int s = 1; s < (1 << m); ++s) { int sum = 0; for (int i = 0; i < m; ++i) { if (s >> i & 1) sum += b[i]; } ok |= sum == a[0]; } cout << (ok ? "YES" : "NO"); } void sub2() { bool good = false; sort(b, b + m); do { bool ok = true; for (int i = 0, j = 0; i < n; ++i) { int sum = 0; while (j < m && sum < a[i]) { sum += b[j]; j += 1; } ok &= sum == a[i]; } good |= ok; if (good) break; } while (next_permutation(b, b + m)); cout << (good ? "YES": "NO"); } void maximize(int &x, int y) { if (x < y) x = y; } void sub3() { vector<int> sum(1 << m); for (int s = 1; s < (1 << m); ++s) { int cur = 0; for (int i = 0; i < m; ++i) { if (s >> i & 1) cur += b[i]; } sum[s] = cur; } vector<vector<int>> dp(n, vector<int>(1 << m)); for (int s = 0; s < (1 << m); ++s) { if (sum[s] == a[0]) dp[0][s] = 1; } for (int i = 1; i < n; ++i) { for (int s = 0; s < (1 << m); ++s) { int msk = ((1 << m) - 1) ^ s; for (int x = msk; ; x = (x - 1) & msk) { if (sum[x] == a[i]) { maximize(dp[i][s], dp[i - 1][x] + 1); } else { dp[i][x] = dp[i - 1][x]; } if (x == 0) break; } } } bool good = false; for (int s = 0; s < (1 << m); ++s) { if (dp[n - 1][s] == n) good = true; } cout << (good ? "YES": "NO"); } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 0; i < n; ++i) cin >> a[i]; for (int i = 0; i < m; ++i) cin >> b[i]; sub3(); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...