Submission #1211341

#TimeUsernameProblemLanguageResultExecution timeMemory
1211341tlamFeast (NOI19_feast)C++20
100 / 100
927 ms22744 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long

int n, k;
pair<ll, ll> dpc(ll k, const vector<int>& a){
    vector<vector<pair<ll, ll>>> dp(n, vector<pair<ll, ll>>(2));
    dp[0][0] = {0, 0};
    dp[0][1] = {a[0]-k, 1};
    for(int i=1; i<n; ++i){
        dp[i][0] = max(dp[i-1][0], dp[i-1][1]);
        pair<ll, ll> op1 = {dp[i-1][0].first + a[i]-k, dp[i-1][0].second + 1};
        pair<ll, ll> op2 = {dp[i-1][1].first + a[i], dp[i-1][1].second};
        dp[i][1] = max(op1, op2);
    }
    return max(dp[n-1][0], dp[n-1][1]);
}

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
    cin >> n >> k;
    vector<int> a(n);
    for(int i=0; i<n; i++) cin>>a[i];
    ll l=0, r=1e18, m;
    while(l<r){
        m = (l+r+1) / 2;
        if(dpc(m, a).second>=k) l=m;
        else r = m-1;
    }
    auto ans = dpc(l, a);
    cout << ans.first+l*k << '\n';
    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...