Submission #601029

#TimeUsernameProblemLanguageResultExecution timeMemory
601029pakhomoveeStove (JOI18_stove)C++17
0 / 100
9 ms2668 KiB
#include <iostream> #include <algorithm> #include <vector> using namespace std; #define int long long const int maxn = 100'001; const int inf = 1e18; int dp[maxn]; int dp1[maxn]; int p[maxn]; pair<int, int> eval(int lambda, vector<int> &t) { const int n = t.size(); fill(dp, dp + maxn, inf); fill(p, p + maxn, -1); fill(dp1, dp1 + maxn, inf); dp[0] = 0; dp1[0] = 0; for (int i = 1; i <= n; ++i) { for (int j = i; j > 0; --j) { if (dp[i] > dp[j - 1] + t[i - 1] - t[j - 1] + 1 + lambda) { dp1[i] = dp1[j - 1] + 1; dp[i] = dp[j - 1] + t[i - 1] - t[j - 1] + 1 + lambda; } else if (dp[i] == dp[j - 1] + t[i - 1] - t[j - 1] + 1 + lambda) { dp1[i] = min(dp1[i], dp1[j - 1] + 1); } } } return { dp[n], dp1[n] }; } int32_t main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int n, k; cin >> n >> k; vector<int> t(n); for (int& i : t) { cin >> i; } int l = 0, r = 1e16; while (l + 1 < r) { int m = (l + r) / 2; if (eval(m, t).second > k) { l = m; } else { r = m; } } auto [a, b] = eval(r, t); cout << a - k * r; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...