제출 #1198733

#제출 시각아이디문제언어결과실행 시간메모리
1198733tab1540Feast (NOI19_feast)C++20
4 / 100
1095 ms10824 KiB
#include <iostream>

using namespace std;

int arr[300009];
int n, k;

pair<long long, int> dp[300009][2];

pair<long long, int> gaymen(int pen) {
    for (int i = 1; i <= n; i++) {
        dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]);

        dp[i][1] = max(
            make_pair(dp[i - 1][1].first + arr[i], dp[i - 1][1].second),
            max(
                make_pair(dp[i - 1][0].first + arr[i] - pen, dp[i - 1][0].second + 1),
                make_pair(dp[i - 1][1].first + arr[i] - pen, dp[i - 1][1].second + 1)
            )
        );
    }
    return max(
        dp[n][1],
        dp[n][0]
    );
}

int r = 1;

int main() {
    dp[0][1].first = -(1ll << 60);
    cin >> n >> k;

    for (int i = 1;  i<= n; i++) {
        cin >> arr[i];
        r += arr[i];
    } 


    int l = 0;

    while (l < r) {
        int mid = (l + r + 1) >> 1;

        if (gaymen(mid).second >= k) {
            l = mid;
        } else {
            r = mid - 1;
        }
    }

    cout << gaymen(l).first + l * k;

    return 0;
}
#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...