제출 #1224136

#제출 시각아이디문제언어결과실행 시간메모리
1224136thinknoexitKitchen (BOI19_kitchen)C++20
0 / 100
22 ms580 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 303; 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; if (k > m) { cout << "Impossible\n"; return 0; } for (int i = 1;i <= n;i++) { cin >> a[i]; if (a[i] < k) { cout << "Impossible\n"; return 0; } } dp[0][0] = 0; ll ans = 0; for (int j = 1;j <= m;j++) { int b; cin >> b; for (int l = j - 1;l >= 0;l--) { for (int i = 300;i >= 0;i--) { dp[l + 1][min(300, i + b)] = min(dp[l + 1][min(300, i + b)], dp[l][i] + b); } } } for (int i = m;i >= 1;i--) { for (int j = 300;j >= 0;j--) { dp[i][j] = min(dp[i][j], dp[i][j + 1]); } } for (int i = k + 1;i <= m;i++) { for (int j = 0;j <= 300;j++) { dp[i][j] = min(dp[i][j], dp[i + 1][j]); } } for (int i = 1;i <= n;i++) { ans -= a[i]; ans += dp[min(m, a[i])][a[i]]; } if (ans >= 1e9) cout << "Impossible\n"; else 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...