#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 time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |