Submission #1320996

#TimeUsernameProblemLanguageResultExecution timeMemory
1320996tolgaFeast (NOI19_feast)C++20
100 / 100
126 ms12120 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define endl '\n' int n, k; vector<ll> a; const ll INF = 1e18; pair<ll, int> check(ll cost) { vector<array<pair<ll, int>, 2>> dp(n + 1); dp[1][0] = {0, 0}; dp[1][1] = {a[0] - cost, 1}; for (int i = 2; i <= n; i++) { dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]); dp[i][1] = max(pair<ll, int>{dp[i - 1][0].first + a[i - 1] - cost, dp[i - 1][0].second + 1}, pair<ll, int>{dp[i - 1][1].first + a[i - 1], dp[i - 1][1].second}); } return max(dp[n][0], dp[n][1]); } int main() { ios::sync_with_stdio(false); cin.tie(nullptr), cout.tie(nullptr); cin >> n >> k; a.resize(n); for (int i = 0; i < n; i++) cin >> a[i]; ll left = 0, right = INF; while (right - left > 1) { ll mid = (left + right) / 2; if (check(mid).second >= k) left = mid; else right = mid; } cout << check(left).first + left * k << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...