제출 #1268227

#제출 시각아이디문제언어결과실행 시간메모리
1268227puc_player은행 (IZhO14_bank)C++20
100 / 100
94 ms8624 KiB
#include <bits/stdc++.h> using namespace std; int N, M; vector<int> salary; vector<int> banknotes; vector<pair<int, int>> dp; vector<vector<int>> candidates; void func() { dp.assign(1 << M, {-1, -1}); dp[0] = {0, 0}; for (int mask = 1; mask < (1 << M); mask++) { for (int i = 0; i < M; i++) { if (!(mask & (1 << i))) continue; auto [lastIdx, lastSum] = dp[mask ^ (1 << i)]; if (lastIdx == -1) continue; lastSum += banknotes[i]; if (lastSum < salary[lastIdx]) { dp[mask] = {lastIdx, lastSum}; } else if (lastSum == salary[lastIdx]) { dp[mask] = {lastIdx + 1, 0}; } } if (dp[mask].first == N) { cout << "YES\n"; return; } } cout << "NO\n"; } int main() { cin >> N >> M; salary.resize(N); banknotes.resize(M); for (int i = 0; i < N; ++i) cin >> salary[i]; for (int i = 0; i < M; ++i) cin >> banknotes[i]; func(); 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...