제출 #1366931

#제출 시각아이디문제언어결과실행 시간메모리
1366931njoopFeast (NOI19_feast)C++20
100 / 100
720 ms23952 KiB
#include <bits/stdc++.h>
#define int long long
using namespace std;

int n, k;
vector<int> arr;

pair<int, int> cal(int k) {
    vector<vector<pair<int, int>>> dp(n+2, vector<pair<int, int>>(2, {0, 0}));
    dp[1][0] = {0, 0};
    dp[1][1] = {arr[1]-k, 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+arr[i]-k, dp[i-1][0].second+1), make_pair(dp[i-1][1].first+arr[i], dp[i-1][1].second));
    }
    return max(dp[n][0], dp[n][1]);
}

signed main() {
    cin.tie(0)->sync_with_stdio(0);
    cin >> n >> k;
    arr.assign(n+2, 0);
    for(int i=1; i<=n; i++) {
        cin >> arr[i];
    }
    int l=0, r=1e18;
    while(l < r) {
        int mid = (l+r)/2;
        if(cal(mid).second <= k) r = mid;
        else l = mid+1;
    }
    cout << cal(l).first + k*l;
}
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…
#결과 실행 시간메모리채점기 출력
결과를 불러오는 중입니다…