제출 #992053

#제출 시각아이디문제언어결과실행 시간메모리
992053Callie은행 (IZhO14_bank)C++11
100 / 100
139 ms58032 KiB
#include <iostream> #include <utility> #include <vector> using namespace std; int main() { int people, banknotes; cin >> people >> banknotes; vector<int> plist(people); vector<int> blist(banknotes); for(int i = 0; i < people; i++) { cin >> plist[i]; } for(int i = 0; i < banknotes; i++) { cin >> blist[i]; } vector<vector<int> > dp((1 << banknotes), vector<int>(2)); for(int i = 0; i < (1 << banknotes); i++) { dp[i][0] = -1; dp[i][1] = -1; } dp[0][0] = 0; dp[0][1] = 0; for(int i = 0; i < (1 << banknotes); i++) { for(int j = 0; j < banknotes; j++) { if((i & (1 << j)) == 0) continue; if(dp[i ^ (1 << j)][0] == -1) continue; if(dp[i ^ (1 << j)][0] == banknotes) continue; int p = dp[i ^ (1 << j)][0]; int b = dp[i ^ (1 << j)][1]; if(b + blist[j] < plist[p]) { dp[i][0] = p; dp[i][1] = b + blist[j]; } else if(b + blist[j] <= plist[p]) { dp[i][0] = p + 1; dp[i][1] = 0; } } } for(int i = 0; i < (1 << banknotes); i++) { if(dp[i][0] == people) { cout << "YES"; return 0; } } cout << "NO"; 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...