Submission #493120

#TimeUsernameProblemLanguageResultExecution timeMemory
493120wiwihoKitchen (BOI19_kitchen)C++14
0 / 100
1078 ms22020 KiB
#include <bits/stdc++.h> #define printv(a, b) {\ for(auto pv : a) b << pv << " ";\ b << "\n";\ } using namespace std; typedef long long ll; const ll MAX = INT_MAX; void nosol(){ cout << "Impossible\n"; exit(0); } #define int ll int n, m, k; vector<int> a; vector<int> b; ll sa = 0; const int SZ = 40; ll calc(int h){ vector<vector<ll>> dp(m + 2, vector<ll>((m + 1) * SZ + 10, -MAX)); dp[0][0] = 0; for(int i = 1; i <= m; i++){ for(int j = i; j >= 0; j--){ for(int s = j * SZ; s >= 0; s--){ if(dp[j][s] == -MAX) continue; ll tmp = dp[j][s] + min(b[i], h + 1); int nxt = j + (b[i] >= h); dp[nxt][s + b[i]] = max(dp[nxt][s + b[i]], tmp); } } } ll ans = MAX; for(int i = k; i <= m; i++){ for(int j = sa; j <= m * SZ; j++){ if(dp[i][j] >= n * k) ans = min(ans, j - sa); } } return ans; } signed main(){ ios_base::sync_with_stdio(false); cin.tie(0); cerr.tie(0); cin >> n >> m >> k; a.resize(n + 1); b.resize(m + 1); ll sb = 0; for(int i = 1; i <= n; i++) cin >> a[i], sa += a[i]; for(int i = 1; i <= m; i++) cin >> b[i], sb += b[i]; sort(a.begin() + 1, a.end(), greater<>()); sort(b.begin() + 1, b.end(), greater<>()); if(k > m || sa > sb){ nosol(); } for(int i = 1; i <= n; i++) if(a[i] < k) nosol(); ll ans = MAX; for(int i = 0; i <= SZ; i++){ ans = min(ans, calc(i)); } if(ans == MAX){ assert(false); nosol(); } cout << ans << "\n"; 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...