Submission #1127640

#TimeUsernameProblemLanguageResultExecution timeMemory
1127640hd4866596K blocks (IZhO14_blocks)C++20
100 / 100
168 ms165344 KiB
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll inf=1e9+7;
int n,k,a[100005];
ll dp[100005][105];
ll f[100005][105];
int main(){
    cin >> n >> k;
    for(int i=1;i<=n;i++) cin >> a[i];
    memset(dp,inf,sizeof(dp));
    memset(f,inf,sizeof(f));
    a[0]=inf;
    stack<int> q;
    q.push(0);
    dp[0][0]=0;
    for(int i=1;i<=n;i++){
        while(!q.empty()&&a[q.top()]<a[i]){
            for(int j=1;j<=k;j++){
                f[i][j]=min(f[q.top()][j],f[i][j]);
                dp[i][j]=min(f[q.top()][j-1]+a[i],dp[i][j]);
            }
            q.pop();
        }
        int x=q.empty()?0:q.top();
        for(int j=1;j<=k;j++){
            dp[i][j]=min({dp[i][j],dp[x][j],dp[x][j-1]+a[i]});
            f[i][j]=min(f[i][j],dp[i][j]);
        }
        q.push(i);
    }
    cout << dp[n][k];
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...