Submission #1208247

#TimeUsernameProblemLanguageResultExecution timeMemory
1208247KindaGoodGamesFeast (NOI19_feast)C++20
100 / 100
447 ms16844 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+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(){ cin >> n >> k; arr.resize(n); for(int i = 0; i < n; i++){ cin >> arr[i]; } int l = 0, r = INF; int val = 0; int ma = 0; while(l <= r){ int mid = (l+r)/2; auto cur = calc(mid); int v = cur.first + (cur.second * mid); if(cur.second <= k){ ma = max(ma, v); } if(cur.second >= k){ 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...