This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <iostream>
#include <cmath>
#include <cctype>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <deque>
#include <stack>
#include <unordered_set>
#include <sstream>
#include <cstring>
#include <iomanip>
#include <queue>
#include <unordered_map>
#include <random>
#include <cfloat>
#include <chrono>
#include <bitset>
#include <complex>
#include <immintrin.h>
#include <cassert>
#define INF 1'000'000'000
int32_t* arr;
void advance(int32_t n, int32_t* dp, int32_t* dp2) {
    dp2[0] = INF;
    for(int32_t i = 1; i <= n; i++) {
        dp2[i] = INF;
        int32_t max_ = 0;
        for(int32_t j = i - 1; j >= 0; j--) {
            max_ = std::max(max_, arr[j]);
            dp2[i] = std::min(dp2[i], dp[j] + max_);
        }
    }
}
int main() {
    int32_t n, k;
    std::cin >> n >> k;
    arr = new int32_t[n];
    for(int32_t i = 0; i < n; i++)
        std::cin >> arr[i];
    int32_t* dp = new int32_t[n + 1];
    dp[0] = 0;
    for(int32_t i = 1; i <= n; i++)
        dp[i] = std::max(dp[i - 1], arr[i - 1]);
    dp[0] = INF;
    int32_t* dp2 = new int32_t[n + 1];
    for(int32_t i = 1; i < k; i++) {
        advance(n, dp, dp2);
        int32_t* tmp = dp;
        dp = dp2;
        dp2 = tmp;
    }
    std::cout << dp[n];
    return 0;
}
         
| # | 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... |