제출 #900391

#제출 시각아이디문제언어결과실행 시간메모리
900391n3rm1nKitchen (BOI19_kitchen)C++17
29 / 100
1050 ms684 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const int MAXN = 305; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } int n, m, k; int a[MAXN], b[MAXN]; int total = 0; void read() { cin >> n >> m >> k; for (int i = 1; i <= n; ++ i) { cin >> a[i]; total += a[i]; } for (int i = 1; i <= m; ++ i) cin >> b[i]; for (int i = 1; i <= n; ++ i) { if(a[i] < k) { cout << "Impossible" << endl; exit(0); } } } int taken[MAXN]; int p[MAXN], notused[MAXN]; int solve() { memset(taken, 0, sizeof(taken)); int left = total, sumup = 0; int ok = 0; for (int i = 1; i <= m; ++ i) { if(p[i]) { notused[i] = b[i]; for (int j = 1; j <= n; ++ j) { if(taken[j] < k && notused[i] > 0) { taken[j] ++; if(taken[j] == k)ok ++; notused[i] --; left --; } } sumup += notused[i]; } } if(sumup < left || ok < n)return 1e9; else { return sumup - left; } } int ans = 1e9; void gen(int pos) { if(pos > m) { ans = min(ans, solve()); return; } p[pos] = 0; gen(pos+1); p[pos] = 1; gen(pos+1); } int dp[MAXN * MAXN + MAXN * MAXN]; void solve_k1() { dp[0] = 1; for (int i = 1; i <= m; ++ i) { for (int j = total; j >= 0; -- j) if(dp[j])dp[j+b[i]] = 1; } for (int i = total; i <= 2*total; ++ i) { if(dp[i]) { cout << i - total << endl; exit(0); } } cout << "Impossible" << endl; } int main() { speed(); read(); if(k == 1) { solve_k1(); return 0; } gen(1); if(ans == 1e9)cout << "Impossible" << endl; else cout << ans << endl; return 0; } /** 297 208 1 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 168 252 252 252 252 252 272 252 252 252 252 252 6 252 252 250 252 252 252 252 2 252 252 252 252 252 252 252 5 252 252 252 252 252 252 254 252 252 252 252 252 252 252 252 252 252 249 252 252 252 252 252 252 252 252 252 252 154 252 252 252 252 252 252 252 252 252 252 252 252 251 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 1 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 2 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 4 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 1 252 252 252 252 252 3 1 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 252 253 252 252 252 252 252 */
#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...