Submission #493032

#TimeUsernameProblemLanguageResultExecution timeMemory
493032wiwihoKitchen (BOI19_kitchen)C++14
9 / 100
106 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()); 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; for(int j = 0; j < i; j++){ for(int s = 0; s <= m * SZ; s++){ ll tmp = MAX; if(j + 1 < k) tmp = dp[j][s]; else if(j + 1 == k) tmp = dp[j][s] + k * b[i]; else tmp = dp[j][s] + 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...