제출 #745936

#제출 시각아이디문제언어결과실행 시간메모리
745936vjudge1Kitchen (BOI19_kitchen)C++14
9 / 100
1075 ms332 KiB
#include<bits/stdc++.h> using namespace std; int main(){ int n, m, k, requiredHours = 0; cin >> n >> m >> k; vector<int> meals(n), chefs(m); for (int & x : meals) { cin >> x; if (x < k){ cout << "Impossible" << endl; return 0; } requiredHours += x; } for (int & x : chefs) cin >> x; int mo = INT_MAX; for (int mask = 1; mask < (1 << m); mask++){ if (__builtin_popcount(mask) < k) continue; int orak = 0; set<pair<int, int> > tud, tud2; for (int i = 0; i < m; i++){ if ((1 << i) & mask) { orak += chefs[i]; tud.insert(make_pair(chefs[i], i)); } } bool jo = true; for (int i = 0; i < n; i++){ for (int j = 0; j < k; j++){ if (tud.size() == 0){ jo = false; break; } if ((*tud.rbegin()).first != 1){ tud2.insert(make_pair((*tud.rbegin()).first - 1, (*tud.rbegin()).second)); } tud.erase(*tud.rbegin()); } if (jo == false) break; while(!tud.empty()){ tud2.insert(*tud.rbegin()); tud.erase(*tud.rbegin()); } swap(tud, tud2); } if (jo == false) continue; if (requiredHours <= orak) mo = min(mo, orak - requiredHours); } if (mo != INT_MAX) cout << mo << endl; else cout << "Impossible" << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...