제출 #795051

#제출 시각아이디문제언어결과실행 시간메모리
795051nguyennehehe은행 (IZhO14_bank)C++14
100 / 100
102 ms8532 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"); } template<typename T> void maximize(T &x, T 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) { dp[i] = dp[i - 1]; 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 | x], dp[i - 1][s] + 1); } 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"); } void sub4() { vector<pair<int, int>> dp(1 << m, {-1, 0}); // (pp, left) dp[0] = {0, 0}; for (int s = 0; s < (1 << m); ++s) { for (int i = 0; i < m; ++i) { if (s >> i & 1) continue; int sum = dp[s].second + b[i]; int pp = dp[s].first; if (sum == a[pp]) { pp += 1; sum = 0; } maximize(dp[s | (1 << i)], {pp, sum}); } } auto [x, y] = *max_element(dp.begin(), dp.end()); if (x == n) cout << "YES"; else cout << "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]; sub4(); }

컴파일 시 표준 에러 (stderr) 메시지

bank.cpp: In function 'void sub4()':
bank.cpp:98:8: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   98 |   auto [x, y] = *max_element(dp.begin(), dp.end());
      |        ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...