Submission #1208244

#TimeUsernameProblemLanguageResultExecution timeMemory
1208244KindaGoodGamesFeast (NOI19_feast)C++20
0 / 100
427 ms16660 KiB
#include<bits/stdc++.h>

#define ll long long
#define int long long
#define pii pair<int,int>
#define tiii tuple<int,int,int>
using namespace std;

vector<int> arr;
    int n,k;
    int INF = numeric_limits<int>::max()/2;

pii calc(int lambda){
    vector<vector<pii>> dp(2, vector<pii>(n));
    dp[0][0] = {0,0};
    dp[1][0] = {arr[0],1};

    for(int i = 1; i < n; i++){
        dp[0][i] = max(dp[0][i-1], dp[1][i-1]);
        dp[1][i] = max(make_pair(dp[0][i-1].first - lambda + arr[i], dp[0][i-1].second), 
                       make_pair(dp[1][i-1].first+arr[i], dp[1][i-1].second));
    }
    return max(dp[0][n-1], dp[1][n-1]);
}

int32_t main(){
    cin >> n >> k;
    arr.resize(n);

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

    int l = 0, r = INF;
    int val = 0;
    while(l <= r){
        int mid = (l+r)/2;
        auto cur = calc(mid);
        if(cur.second > k){
            l = mid+1;
            val = mid;
        }else{
            r = mid-1;
        }
    }

    pii res = calc(val+1);
    cout << res.first + (k*(val+1)) << endl;
}
#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...