Submission #1285938

#TimeUsernameProblemLanguageResultExecution timeMemory
1285938SamueleVidThe short shank; Redemption (BOI21_prison)C++20
0 / 100
1 ms572 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long int main() { ios_base::sync_with_stdio(0); cin.tie(0); int N, D, T; cin >> N >> D >> T; vector<ll> t(N); for (int i = 0; i < N; i ++) cin >> t[i]; ll dp[N + 1][D + 1][N + 1]; ll min_value[N + 1][D + 1][N + 1]; ll best_prev[N + 1][D + 1][N + 1]; for (int n = 0; n <= N; n ++) { for (int d = 0; d <= D; d ++) { for (int m = 0; m <= N; m ++) { dp[n][d][m] = 1e9; min_value[n][d][m] = 1e9; best_prev[n][d][m] = 1e9; } } } for (int d = 0; d <= D; d ++) { dp[0][d][0] = 0; min_value[0][d][0] = 0; best_prev[0][d][0] = 0; } // min m[0,n-1] dp[n-1,d-1,m] for (int n = 1; n <= N; n ++) { for (int d = 1; d <= D; d ++) { for (int m = 1; m <= n; m ++) { if (m < n) { min_value[n][d][m] = min(min_value[n - 1][d][m] + 1, t[n - 1]); dp[n][d][m] = dp[n - 1][d][m] + (min_value[n][d][m] <= T ? 1 : 0); } if (m == n) { min_value[n][d][m] = t[n - 1]; dp[n][d][m] = best_prev[n - 1][d - 1][m - 1] + (min_value[n][d][m] <= T ? 1 : 0); } best_prev[n][d][m] = min(best_prev[n][d][m - 1], dp[n][d][m]); } } } ll res = 1e9; for (int m = 0; m <= N; m ++) { res = min(res, dp[N][D][m]); } cout << res - 1 << '\n'; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...