# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1241232 | Trn115 | K blocks (IZhO14_blocks) | C++20 | 85 ms | 4372 KiB |
#include <bits/stdc++.h>
#define int long long
#define all(v) v.begin(), v.end()
using namespace std;
constexpr int N = 2e5+5;
constexpr int K = 505;
constexpr int INF = 1e18;
int n, k;
int a[N];
int l[N];
vector<int> dp, prevdp, mindp;
signed main()
{
cin.tie(0)->sync_with_stdio(0);
if (fopen("source.inp", "r"))
{
freopen("source.inp", "r", stdin);
freopen("source.out", "w", stdout);
}
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> a[i];
for (int i = 1; i <= n; ++i)
{
for (l[i] = i - 1; l[i] && a[l[i]] <= a[i]; l[i] = l[l[i]]) {}
}
dp.assign(n+1, INF);
prevdp.assign(n+1, INF);
dp[0] = 0;
for (int i = 1; i <= k; ++i)
{
swap(dp, prevdp);
dp.assign(n+1, INF);
mindp.assign(n+1, INF);
for (int j = 1; j <= n; ++j)
{
mindp[j] = prevdp[j-1];
for (int t = j - 1; t > l[j]; t = l[t])
{
mindp[j] = min(mindp[j], mindp[t]);
}
dp[j] = min(dp[l[j]], mindp[j] + a[j]);
}
}
cout << dp[n];
}
Compilation message (stderr)
# | 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... |