Submission #1273549

#TimeUsernameProblemLanguageResultExecution timeMemory
1273549KindaGoodGamesThe short shank; Redemption (BOI21_prison)C++20
15 / 100
446 ms589824 KiB
#include<bits/stdc++.h>

using namespace std;

vector<int> arr;
    int n,d,t;
    int INF = numeric_limits<int>::max()/2;
int calc(int l, int r){
    int time = INF;
    int cnt = 0;
    for(int i = l; i <= r; i++){
        time = min(time+1, arr[i]);
        if(time <= t){
            cnt++;
        }
    }

    return cnt;
}   

int main(){
    cin >> n >> d >> t;
 
    arr.resize(n);
    for(int i = 0; i < n; i++){
        cin >> arr[i];
    }
    vector<vector<int>> C(n, vector<int>(n));
    for(int i = 0; i < n; i++){
        for(int j = i; j < n; j++){
            C[i][j] = calc(i,j);
        }
    } 

    // d pillows, [0;i]
    vector<vector<int>> dp(d+1, vector<int>(n, INF)); 

    for(int i = 0; i < n; i++){
        dp[0][i] = calc(0,i);
    }
    for(int k = 1; k <= d; k++){
        for(int i = 0; i < n; i++){ 
            for(int j = 1; j <= i; j++){
                dp[k][i] = min(dp[k][i], dp[k-1][j-1] + C[j][i]);
            }
        }
    }
    cout << dp[d][n-1] << 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...
#Verdict Execution timeMemoryGrader output
Fetching results...