Submission #1364871

#TimeUsernameProblemLanguageResultExecution timeMemory
1364871njoopK blocks (IZhO14_blocks)C++20
0 / 100
0 ms348 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    int n, k;
    cin >> n >> k;
    vector<int> arr(n+2, 0);
    vector<vector<int>> dp(k+2, vector<int>(n+2, 0));
    for(int i=1; i<=n; i++) cin >> arr[i];
    for(int i=1; i<=k; i++) {
        stack<tuple<int, int, int>> s;
        int mn = 0;
        dp[i][i] = dp[i-1][i-1] + arr[i];
        s.push({i-1, arr[i], dp[i][i]});
        for(int j=i; j<=n; j++) {
            while(!s.empty() && arr[j] >= get<1>(s.top())) s.pop();
            if(s.empty()) {
                dp[i][j] = dp[i-1][i-1] + arr[j];
                s.push({i-1, arr[j], dp[i][j]});
            } else {
                dp[i][j] = min(dp[i-1][get<0>(s.top())] + arr[j], get<2>(s.top()));
                s.push({get<0>(s.top()), arr[j], dp[i][j]});
            }
        }
    }
    cout << dp[k][n];
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...