제출 #1233589

#제출 시각아이디문제언어결과실행 시간메모리
1233589ishaanthenerd은행 (IZhO14_bank)C++20
19 / 100
85 ms4804 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const ll MOD = 1e9 + 7; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; vector<int> a(n), b(m); for (int i = 0; i < n; i++) cin >> a.at(i); for (int i = 1; i < n; i++) a.at(i) += a.at(i - 1); for (int i = 0; i < m; i++) cin >> b.at(i); vector<int> sum((1 << m), 0); for (int mask = 1; mask < (1 << m); mask++) { int index = 0; for (int i = 0; i < m; i++) { if (mask & (1 << i)) { index = i; break; } } sum.at(mask) = sum.at(mask ^ (1 << index)) + b.at(index); } vector<vector<bool>> dp(n, vector<bool>((1 << m), false)); vector<bool> qualified((1 << m), false); for (int mask = 1; mask < (1 << m); mask++) { if (sum.at(mask) == a.at(0)) { dp.at(0).at(mask) = true; } } for (int mask = 1; mask < (1 << m); mask++) { // update qualified for (int j = 0; j < m; j++) { if (!(mask & (1 << j)) && qualified.at(mask ^ (1 << j))) { qualified.at(mask) = true; } } } for (int i = 1; i < n; i++) { for (int mask = 1; mask < (1 << m); mask++) { if (sum.at(mask) == a.at(i) && qualified.at(mask)) { dp.at(i).at(mask) = true; } } // update qualified qualified = vector<bool>((1 << m), false); for (int mask = 1; mask < (1 << m); mask++) { for (int j = 0; j < m; j++) { if (!(mask & (1 << j)) && qualified.at(mask ^ (1 << j))) { qualified.at(mask) = true; } } } } bool works = false; for (int mask = 1; mask < (1 << m); mask++) { if (dp.back().at(mask)) { works = true; break; } } cout << (works ? "YES" : "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...