제출 #1166163

#제출 시각아이디문제언어결과실행 시간메모리
1166163NxmkxingFeast (NOI19_feast)C++20
18 / 100
96 ms12124 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; using pll = pair<long long, long long>; const int N = 3e5 + 10; ll n, k, a[N]; pll dp[N][2]; pll solve(ll lambda) { for (int i = 1; i <= n; i++) dp[i][0] = dp[i][1] = {0, 0}; dp[1][0] = {0, 0}; dp[1][1] = {a[1] - lambda, 1}; for (int i = 2; i <= n; i++) { dp[i][0] = max(dp[i-1][0], dp[i-1][1]); dp[i][1] = max(make_pair(dp[i-1][0].first + a[i] - lambda, dp[i-1][0].second + 1), make_pair(dp[i-1][1].first + a[i], dp[i-1][1].second)); } return max(dp[n][0], dp[n][1]); } int main() { cin.tie(nullptr)->ios_base::sync_with_stdio(false); cin >> n >> k; for (int i = 1; i <= n; i++) cin >> a[i]; ll b = 1, e = 1e18; while (b < e) { ll mid = (b + e + 1) / 2; if (solve(mid).second >= k) b = mid; else e = mid - 1; } cout << solve(b).first + b * 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...