#include<bits/stdc++.h>
#define int long long
#define ss second
#define ff first
#define pb push_back
const int mxn=100005;
using namespace std;
int a[mxn],l[mxn],mn[mxn];
int dp[mxn][2];
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,s;
cin>>n>>s;
for(int i=1; i<=n; i++) {
cin>>a[i];
}
for(int i=1; i<=n; i++) {
for(l[i]=i-1; l[i]>0&&a[l[i]]<=a[i];) {
l[i]=l[l[i]];
}
}
memset(dp,100,sizeof(dp));
dp[1][1]=a[1];
for(int i=2; i<=n; i++) {
dp[i][1]=max(dp[i-1][1],a[i]);
}
for(int k=2; k<=s; k++) {
mn[k-1]=dp[0][0];
for(int i=1; i<=n; i++) {
dp[i][k%2]=dp[0][0];
}
for(int i=k; i<=n; i++) {
mn[i]=dp[i-1][(k-1)%2];
for(int j=i-1; j>l[i]; j=l[j])
{
mn[i]=min(mn[i],mn[j]);
}
dp[i][k%2]=min(dp[l[i]][k%2],mn[i]+a[i]);
}
}
cout<<dp[n][s%2];
}
# | 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... |