Submission #639610

#TimeUsernameProblemLanguageResultExecution timeMemory
639610PietraK blocks (IZhO14_blocks)C++14
53 / 100
11 ms10808 KiB
#include<bits/stdc++.h>
#define int long long
using namespace std ;

const int maxn = 110 ;
const int inf = 1e16 ;

int n, k, v[maxn], mx[maxn][maxn], dp[maxn][maxn][maxn] ;

int solve(int i, int j, int q){
    if(i > n) return inf ;
    if(q == k) return mx[j][n] ;
    if(dp[i][j][q] != -1) return dp[i][j][q] ;
    return dp[i][j][q] = min(solve(i+1, j, q), solve(i+1, i+1, q+1) + mx[j][i]) ;
}

int32_t main(){

    cin >> n >> k ;

    k-- ;

    for(int i = 1 ; i <= n ; i++){
        cin >> v[i] ;
    }

    memset(dp, -1, sizeof dp) ;

    for(int i = 1 ; i <= n ; i++){
        for(int j = i ; j <= n ; j++){
            int kk = 0 ;
            for(int k = i ; k <= j ; k++) kk = max(kk, v[k]) ;
            mx[i][j] = kk ;
        }
    }

    cout << solve(1, 1, 0) << "\n" ;

}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...