제출 #1320992

#제출 시각아이디문제언어결과실행 시간메모리
1320992tolgaFeast (NOI19_feast)C++20
0 / 100
84 ms11964 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 (left <= right) { ll mid = (left + right) / 2; int cnt = check(mid).second; if (cnt > k) left = mid + 1; else if (cnt < k) right = mid - 1; else { cout << check(left).first + left * k << endl; break; } } }
#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...