제출 #1147763

#제출 시각아이디문제언어결과실행 시간메모리
1147763spydukcFeast (NOI19_feast)C++20
4 / 100
130 ms12136 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> #define f first #define s second #define mp make_pair #define int long long using namespace std; int a[300001]; pair<int, int> solve(int l, int n) { pair<int, int> dp[n][2]; dp[0][0] = {0, 0}; dp[0][1] = {a[0]-l, 1}; for (int i = 1; i < n; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = max( mp(dp[i-1][0].f+a[i]-l, dp[i-1][0].s+1), mp(dp[i-1][1].f+a[i], dp[i-1][0].s) ); } return max(dp[n-1][0], dp[n-1][1]); } signed main() { int n, k; cin >> n >> k; for (int i = 0; i < n; i++) { cin >> a[i]; } int low = 0; int high = 1e9; int mid = low + (high - low) / 2; while (low < high) { mid = low + (high - low) / 2; pair<int, int> res = solve(mid, n); if (res.s <= k) { high = mid; } else { low = mid + 1; } } cout << solve(low, n).f+low*k; }
#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...