Submission #1204372

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

#define ll long long
#define int ll
#define pii pair<int,int>
#define tiii tuple<int,int,int>

using namespace std;

int INF = numeric_limits<ll>::max()/2;

vector<int> arr;
int n;
pii solve(int lambda){
    vector<vector<pii>> dp(2, vector<pii>(n+1, {-INF, 0}));

    dp[0][0] = {0,0};

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

    return max(dp[0][n], dp[1][n]);
}

int32_t main(){
    int k;
    cin >> n >> k;
    arr.resize(n);
    int sum = 0;
    for(int i = 0; i < n; i++){
        cin >> arr[i];
        sum += abs(arr[i]);
    }

    int l = 0; int r = INF;

    int ma = 0;
    while(l <= r){
        int mid = (l+r)/2;
        auto res = solve(mid);

        if(res.second >= k){
            int v = res.first+(mid*res.second);
            ma = max(ma, v);
            l = mid-1;
        }else{
            r = mid+1;
        }
    }

    
    cout << ma<< 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...