제출 #1191344

#제출 시각아이디문제언어결과실행 시간메모리
1191344rhm_ganBank (IZhO14_bank)C++20
71 / 100
98 ms8716 KiB
#include <bits/stdc++.h> using namespace std; #ifdef LOCAL #include "debug.h" #else #define dbg(...) 42 #endif int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> a(n + 1), b(m); for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 0; i < m; i++) { cin >> b[i]; } if (n <= 10 && m <= 10) { auto can = [&]() { int id = 1; int sum = 0; for (int i = 0; i < m; i++) { sum += b[i]; if (sum == a[id]) { id++; if (id == n + 1) { break; } sum = 0; } } return id == n + 1; }; sort(b.begin(), b.end()); if (can()) { cout << "YES" << endl; return 0; } while (next_permutation(b.begin(), b.end())) { if (can()) { cout << "YES" << endl; return 0; } } cout << "NO" << endl; return 0; } vector<pair<int, int>> dp(1 << m, {-1, -1}); dp[0] = {0, 0}; for (int s = 0; s < (1 << m); s++) { for (int i = 0; i < m; i++) { if (s & (1 << i)) continue; auto [id, x] = dp[s]; if (x + b[i] == a[id + 1]) { dp[s | (1 << i)] = {id + 1, 0}; } else { if (x + b[i] <= a[id + 1]) { dp[s | (1 << i)] = {id, x + b[i]}; } } } } for (int s = 0; s < (1 << m); s++) { if (dp[s].first == n) { cout << "YES" << endl; return 0; } } cout << "NO" << endl; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...