#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
template < class S, class T> inline S chmax( S & a, T b) {
if ( a< b) {
a= b;
}
return a;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int dp[ 301 ] ;
int nx[ 301 ] ;
class Solution{
public :
int minDifficulty( vector< int > & A, int D) {
int Q5VJL1cS, i;
int mx;
int N = A.size ( ) ;
if ( D > N) {
return - 1 ;
}
dp[ 0 ] = 0 ;
for ( i= ( 1 ) ; i< ( N+ 1 ) ; i++ ) {
dp[ i] = 1073709056 ;
}
for ( Q5VJL1cS= ( 0 ) ; Q5VJL1cS< ( D) ; Q5VJL1cS++ ) {
for ( i= ( 0 ) ; i< ( N+ 1 ) ; i++ ) {
int j;
nx[ i] = 1073709056 ;
mx = - 1 ;
for ( j= ( 1 ) ; j< ( i+ 1 ) ; j++ ) {
chmax( mx, A[ i- j] ) ;
chmin( nx[ i] , dp[ i- j] + mx) ;
}
}
for ( i= ( 0 ) ; i< ( N+ 1 ) ; i++ ) {
dp[ i] = nx[ i] ;
}
}
return dp[ N] ;
}
}
;
// cLay varsion 20200119-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int dp[301], nx[301];
//
// class Solution {
// public:
// int minDifficulty(vector<int>& A, int D) {
// int mx, N = A.size();
//
// if(D > N) return -1;
//
// dp[0] = 0;
// rep(i,1,N+1) dp[i] = int_inf;
//
// rep(D){
// rep(i,N+1){
// nx[i] = int_inf;
// mx = -1;
// rep(j,1,i+1){
// mx >?= A[i-j];
// nx[i] <?= dp[i-j] + mx;
// }
// }
// rep(i,N+1) dp[i] = nx[i];
// }
// return dp[N];
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIGNobWluKFMgJmEsIFQgYil7CiAgaWYoYT5iKXsKICAgIGE9YjsKICB9CiAgcmV0dXJuIGE7Cn0KdGVtcGxhdGU8Y2xhc3MgUywgY2xhc3MgVD4gaW5saW5lIFMgY2htYXgoUyAmYSwgVCBiKXsKICBpZihhPGIpewogICAgYT1iOwogIH0KICByZXR1cm4gYTsKfQojZGVmaW5lIG1haW4gZHVtbXlfbWFpbgppbnQgbWFpbigpewogIHJldHVybiAwOwp9CiN1bmRlZiBtYWluCmludCBkcFszMDFdOwppbnQgbnhbMzAxXTsKY2xhc3MgU29sdXRpb257CiAgcHVibGljOgogIGludCBtaW5EaWZmaWN1bHR5KHZlY3RvcjxpbnQ+JiBBLCBpbnQgRCl7CiAgICBpbnQgUTVWSkwxY1MsIGk7CiAgICBpbnQgbXg7CiAgICBpbnQgTiA9IEEuc2l6ZSgpOwogICAgaWYoRCA+IE4pewogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBkcFswXSA9IDA7CiAgICBmb3IoaT0oMSk7aTwoTisxKTtpKyspewogICAgICBkcFtpXSA9IDEwNzM3MDkwNTY7CiAgICB9CiAgICBmb3IoUTVWSkwxY1M9KDApO1E1VkpMMWNTPChEKTtRNVZKTDFjUysrKXsKICAgICAgZm9yKGk9KDApO2k8KE4rMSk7aSsrKXsKICAgICAgICBpbnQgajsKICAgICAgICBueFtpXSA9IDEwNzM3MDkwNTY7CiAgICAgICAgbXggPSAtMTsKICAgICAgICBmb3Ioaj0oMSk7ajwoaSsxKTtqKyspewogICAgICAgICAgY2htYXgobXgsIEFbaS1qXSk7CiAgICAgICAgICBjaG1pbihueFtpXSwgZHBbaS1qXSArIG14KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZm9yKGk9KDApO2k8KE4rMSk7aSsrKXsKICAgICAgICBkcFtpXSA9IG54W2ldOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZHBbTl07CiAgfQp9CjsKLy8gY0xheSB2YXJzaW9uIDIwMjAwMTE5LTEKCi8vIC0tLSBvcmlnaW5hbCBjb2RlIC0tLQovLyAjZGVmaW5lIG1haW4gZHVtbXlfbWFpbgovLyB7fQovLyAjdW5kZWYgbWFpbgovLyAKLy8gaW50IGRwWzMwMV0sIG54WzMwMV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgbWluRGlmZmljdWx0eSh2ZWN0b3I8aW50PiYgQSwgaW50IEQpIHsKLy8gICAgIGludCBteCwgTiA9IEEuc2l6ZSgpOwovLyAKLy8gICAgIGlmKEQgPiBOKSByZXR1cm4gLTE7Ci8vIAovLyAgICAgZHBbMF0gPSAwOwovLyAgICAgcmVwKGksMSxOKzEpIGRwW2ldID0gaW50X2luZjsKLy8gCi8vICAgICByZXAoRCl7Ci8vICAgICAgIHJlcChpLE4rMSl7Ci8vICAgICAgICAgbnhbaV0gPSBpbnRfaW5mOwovLyAgICAgICAgIG14ID0gLTE7Ci8vICAgICAgICAgcmVwKGosMSxpKzEpewovLyAgICAgICAgICAgbXggPj89IEFbaS1qXTsKLy8gICAgICAgICAgIG54W2ldIDw/PSBkcFtpLWpdICsgbXg7Ci8vICAgICAgICAgfQovLyAgICAgICB9Ci8vICAgICAgIHJlcChpLE4rMSkgZHBbaV0gPSBueFtpXTsKLy8gICAgIH0KLy8gICAgIHJldHVybiBkcFtOXTsKLy8gICB9Ci8vIH07Cg==