Submission #1224143

#TimeUsernameProblemLanguageResultExecution timeMemory
1224143thinknoexitKitchen (BOI19_kitchen)C++20
0 / 100
22 ms580 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 303; const int K = 300; int a[N]; int dp[N][N]; int main() { cin.tie(nullptr)->sync_with_stdio(false); memset(dp, 0x3f, sizeof dp); int n, m, k; cin >> n >> m >> k; for (int i = 1;i <= n;i++) { cin >> a[i]; } dp[0][0] = 0; ll ans = 0; int sum = 0; for (int j = 1;j <= m;j++) { int b; cin >> b; sum += b; for (int l = j - 1;l >= 0;l--) { for (int i = K;i >= 0;i--) { dp[l + 1][min(K, i + b)] = min(dp[l + 1][min(K, i + b)], dp[l][i] + b); } } } if (k > m) { cout << "Impossible\n"; return 0; } for (int i = 1;i <= n;i++) { if (sum < a[i]) { cout << "Impossible\n"; return 0; } if (a[i] < k) { cout << "Impossible\n"; return 0; } } for (int i = 1;i <= m;i++) { for (int j = K;j >= 0;j--) { dp[i][j] = min(dp[i][j], dp[i][j + 1]); } } // for (int i = 0;i <= K;i++) { // for (int j = 0;j <= K;j++) { // cout << dp[i][j] << " \n"[j == K]; // } // } for (int i = k + 1;i <= K;i++) { for (int j = 0;j <= K;j++) { dp[i][j] = min(dp[i][j], dp[i - 1][j]); } } for (int i = 1;i <= n;i++) { ans -= a[i]; ans += dp[a[i]][a[i]]; } 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...