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