#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int n, k;
cin >> n >> k;
int inf = 1e9;
vector<vector<int>> dp( n + 1, vector<int> (k+1, inf));
vector<int> a(n+1);
for(int i = 1; i <= n; i++){
cin >> a[i];
dp[i][1] = max(dp[i-1][1], a[i]);
if(i == 1)dp[i][1] = a[i];
}
for(int j = 2; j <= k; j ++ ){
vector<array<int,2>> v;
for(int i = j; i <= n; i++){
int mn = dp[i-1][j-1];
while(v.size() && v.back()[0] <= a[i]) {
mn = min(mn, v.back()[1]);
v.pop_back();
};
dp[i][j] = mn + a[i];
if(v.size())dp[i][j] = min(dp[i][j], v.back()[0] + v.back()[1]);
if((v.size() && v.back()[0] + v.back()[1] >= a[i] + mn) || v.empty())v.push_back({a[i], mn});
}
}
//for(int j = 1; j <= k; j ++ ){
//for(int i = 1; i <= n; i++)cout << dp[i][j] << ' ';
//cout << '\n';
//}
cout << dp[n][k] << '\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... |