제출 #1137585

#제출 시각아이디문제언어결과실행 시간메모리
1137585anmattroiFeast (NOI19_feast)C++20
100 / 100
123 ms11004 KiB
#include<bits/stdc++.h> #define maxn 300005 #define fi first #define se second using namespace std; using ii = pair<int, int>; using li = pair<int64_t, int>; int n, k; int a[maxn]; li dp[maxn][2]; li solve_lambda(int64_t x) { dp[0][1] = {LLONG_MIN/2, 0}; for (int i = 1; i <= n; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = max(li{dp[i-1][1].fi+a[i], dp[i-1][1].se}, li{dp[i-1][0].fi+a[i]-x, dp[i-1][0].se+1}); } return max(dp[n][0], dp[n][1]); } int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; int64_t lo = 0, hi = 100000000000000000LL; while (hi-lo>1) { int64_t mid = (lo+hi)>>1LL; if (solve_lambda(mid).se >= k) lo = mid; else hi = mid; } cout << solve_lambda(lo).fi + k*lo; }
#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...