# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1209964 | lmquan | Feast (NOI19_feast) | C++20 | 1091 ms | 23916 KiB |
#define taskname ""
#include <bits/stdc++.h>
using namespace std;
const long long kInf = 100000000000000000;
int main() {
if (fopen(taskname".inp", "r")) {
freopen(taskname".inp", "r", stdin);
freopen(taskname".out", "w", stdout);
}
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, k;
cin >> n >> k;
vector<long long> a(n + 1);
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
auto Solve = [&](long long lambda) -> pair<long long, int> {
vector<vector<pair<long long, int>>> dp(n + 1, vector<pair<long long, int>>(2, {0, 0}));
dp[1][0] = make_pair(0, 0);
dp[1][1] = make_pair(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]);
};
long long low = 0, high = kInf;
while (low < high) {
long long mid = (low + high + 1) / 2;
pair<long long, int> s = Solve(mid);
if (s.second >= k) {
low = mid;
} else {
high = mid - 1;
}
}
cout << Solve(low).first + low * k;
return 0;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |