Submission #1273553

#TimeUsernameProblemLanguageResultExecution timeMemory
1273553KindaGoodGamesThe short shank; Redemption (BOI21_prison)C++20
15 / 100
2097 ms65528 KiB
#pragma GCC optimize("O3, unroll-loops, Ofast")
#include<bits/stdc++.h>

using namespace std;

vector<int> arr;

    int C[4000][4000];
    
    int dp[4000][4000];
    int n,d,t;
    int INF = numeric_limits<int>::max()/2;
int cost(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;
}   

void calc(int k, int l, int r, int optl, int optr){
    if(l >= r) return;
    int mid = (l+r)/2;  
    int opt = -1;
    if(mid == 3){
        cerr<<"";
    }
    for(int j = optl; j <= min(optr,mid); j++){
        if(dp[k][mid] > dp[k-1][j-1] + C[j][mid]){  
            opt = j;
            dp[k][mid] = dp[k-1][j-1] + C[j][mid];
        } 
    } 
    calc(k,l,mid,optl,opt);
    calc(k,mid+1,r,opt,optr);
}

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> d >> t;
 
    arr.resize(n);
    for(int i = 0; i < n; i++){
        cin >> arr[i];
    }
    // C.resize(n, vector<int>(n));
    for(int i = 0; i < n; i++){
        for(int j = i; j < n; j++){
            C[i][j] = cost(i,j);
        }
    } 

    // d pillows, [0;i]
    // dp.resize(d+1, vector<int>(n, INF)); 
    for(int i = 0; i < 4000; i++){
        for(int j = 0; j < 4000; j++){
            dp[i][j] = INF;
        }
    }

    for(int i = 0; i < n; i++){
        dp[0][i] = C[0][i];
    }
    for(int i = 1; i <= d; i++){
        calc(i,0,n,0,n);
    }
    cout << dp[d][n-1] << endl;
}

Compilation message (stderr)

prison.cpp:1:47: warning: bad option '-f unroll-loops' to pragma 'optimize' [-Wpragmas]
    1 | #pragma GCC optimize("O3, unroll-loops, Ofast")
      |                                               ^
prison.cpp:1:47: warning: bad option '-f Ofast' to pragma 'optimize' [-Wpragmas]
prison.cpp:13:22: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
   13 | int cost(int l, int r){
      |                      ^
prison.cpp:13:22: warning: bad option '-f Ofast' to attribute 'optimize' [-Wattributes]
prison.cpp:26:50: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
   26 | void calc(int k, int l, int r, int optl, int optr){
      |                                                  ^
prison.cpp:26:50: warning: bad option '-f Ofast' to attribute 'optimize' [-Wattributes]
prison.cpp:43:10: warning: bad option '-f unroll-loops' to attribute 'optimize' [-Wattributes]
   43 | int main(){
      |          ^
prison.cpp:43:10: warning: bad option '-f Ofast' to attribute 'optimize' [-Wattributes]
#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...