Submission #493040

#TimeUsernameProblemLanguageResultExecution timeMemory
493040wiwihoKitchen (BOI19_kitchen)C++14
9 / 100
105 ms262148 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); } int n, m, k; vector<int> a; vector<int> b; ll sa = 0; const int SZ = 300; int 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(); vector<vector<ll>> dp(m + 1, vector<ll>((m + 1) * SZ + 10, -MAX)); dp[0][0] = 0; for(int i = 1; i <= m; i++){ vector<vector<ll>> dp2 = dp; int cnt = 1; while(i < m && b[i] == b[i + 1]) i++, cnt++; for(int t = 1; t <= cnt; t++){ for(int j = 0; j + t <= m; j++){ for(int s = 0; s <= m * SZ; s++){ ll tmp = MAX; if(j + t < k - 1) tmp = dp[j][s]; else if(j + t >= k) tmp = dp[j][s] + (j + t) * b[i] + j; else tmp = dp[j][s] + t * b[i]; dp2[j + 1][s + b[i]] = max(dp2[j + 1][s + b[i]], tmp); } } } dp.swap(dp2); } 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); } } if(ans == MAX) 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...