This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
// pra cada cara a gnt sabe o intervalo q ele pode precisar
// v[i] - m (sair dele p esse) ou
// dp[i][s] -> min qtd de descidas q eu preciso
// p com s subidas chegar em i
// tem um intervalo p cada cara mas isso depende dos anteriores
// dp[i][alt] = min de ops q eu preciso fzr para que esteja ok
// chegar em i com o ultimo tendo altura alt
#include<bits/stdc++.h>
using namespace std ;
const int maxn = 5e3 + 5 ;
const int maxx = 20 ;
int n, m, v[maxx], dp[maxn][maxn], mx ;
int solve(int i, int alt){
// cout << i << " " << alt << "\n" ;
if(i > n) return 0 ;
if(dp[i][alt] != -1) return dp[i][alt] ;
int ans = maxn ;
for(int j = 0 ; j <= alt + min(m, n*mx) ; j++){
if(v[i] == j) ans = min(ans, solve(i+1, j)) ;
else ans = min(ans, solve(i+1, j) + 1) ;
}
return dp[i][alt] = ans ;
}
int main(){
ios_base::sync_with_stdio(false) ; cin.tie(NULL) ;
cin >> n >> m ;
for(int i = 1 ; i <= n ; i++) cin >> v[i] ;
for(int i = 1 ; i <= n ; i++) mx = max(mx, v[i]) ;
for(int i = 0 ; i <= n ; i++) v[i] += mx ;
memset(dp, -1, sizeof dp) ;
cout << solve(1, mx) << "\n" ;
}
# | 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... |