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... |