Submission #783907

#TimeUsernameProblemLanguageResultExecution timeMemory
783907TheOpChickenKitchen (BOI19_kitchen)C++17
41 / 100
125 ms196768 KiB
#include <iostream> using namespace std; const long long maxN = 305, inf = 1e15; long long barr[maxN], dp[maxN][555555]; int main(){ long long n, m, k; cin >> n >> m >> k; long long total = 0, total1 = 0; for (int i = 0; i < n; i++){ int a; cin >> a; if (a < k){ cout << "Impossible" << endl; return 0; } total += a; } for (int i = 0; i < m; i++) cin >> barr[i], total1 += barr[i]; for (int i = 0; i < m; i++){ for (int j = 0; j <= total1; j++) dp[i][j] = -inf; } dp[0][barr[0]] = min(n, barr[0]); for (int i = 1; i < m; i++){ for (int j = 0; j <= total1; j++){ dp[i][j] = dp[i-1][j]; if (barr[i] <= j){ if (dp[i-1][j-barr[i]] == -inf) continue; dp[i][j] = max(dp[i][j], dp[i-1][j-barr[i]] + min(n, barr[i])); } } } bool pos = 0; long long ans; for (int i = total; i <= total1; i++){ if (dp[m-1][i] >= n*k){ pos = 1; ans = i; break; } } if (!pos) cout << "Impossible" << endl; else cout << ans-total << endl; }
#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...