Submission #1221851

#TimeUsernameProblemLanguageResultExecution timeMemory
1221851svtkFinancial Report (JOI21_financial)C++20
28 / 100
4098 ms192384 KiB
#include <iostream>
#include <vector>
using namespace std;

const int N = 7005;
const int S = N;
const int INF = 1'000'000'005;

int n, d;
int a[N];

int f[S+1][N]; //minimalni mozna hodnota "maximalni a_x v rade se skorem s koncici i"

int check(int l, int r, int s){
    l = max(l, 0);
    r = min(r, n-1);
    int ans = INF;
    for(int i=l; i<=r; i++){
        ans = min(ans, f[s][i]);
    }
    return ans;
}

int main(){
    cin >> n >> d;
    for(int i=0; i<n; i++){
        cin >> a[i];
    }

    for(int i=0; i<n+1; i++){
        for(int j=0; j<n+1; j++){
            f[i][j] = INF;
        }
    }

    for(int i=0; i<n; i++){
        f[1][i] = a[i];
        for(int s=2; s<=i+1; s++){
            if(check(i-d, i-1, s-1) < a[i]){
                f[s][i] = a[i];
            } else {
                f[s][i] = check(i-d, i-1, s);
            }
        }
    }

    for(int s=n; s>=0; s--){
        if(f[s][n-1] != INF){
            cout << s << endl;
            break;
        }
    }

    /*
    for(int i=0; i<n+1; i++){
        for(int j=0; j<n; j++){
            if(f[i][j]!=INF) cout << f[i][j] << "    ";
            else cout << 'X' << "    ";
        }
        cout << endl;
    }
    */

    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...
#Verdict Execution timeMemoryGrader output
Fetching results...