Submission #932488

#TimeUsernameProblemLanguageResultExecution timeMemory
932488andrewK blocks (IZhO14_blocks)C++17
0 / 100
1 ms388 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, k; cin >> n >> k; vector <ll> a(n); for (int i = 0; i < n; i++) { cin >> a[i]; } vector <vector <ll>> dp(k + 1, vector <ll> (n, 1e15)); dp[1][0] = a[0]; for (int i = 1; i < n; i++) { if (a[i] < a[i - 1]) break; dp[1][i] = a[i]; } for (int step = 1; step <= k; step++) { vector <ll> u(n, 1e15); vector <int> st; for (int i = 0; i < n; i++) { while (!st.empty() && a[st.back()] <= a[i]) { u[i] = min(u[i], u[st.back()]); u[i] = min(u[i], dp[step - 1][st.back()]); st.pop_back(); } dp[step][i] = min(dp[step][i], u[i] + a[i]); if (!st.empty()) { dp[step][i] = min(dp[step][i], dp[step - 1][st.back()] + a[i]); } st.push_back(i); } } ll ans = dp[k][n - 1]; for (int i = n - 2; i >= 0; i--) { if (a[i + 1] > a[i]) break; ans = min(ans, dp[k][i]); } cout << ans << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...