Submission #1204374

#TimeUsernameProblemLanguageResultExecution timeMemory
1204374KindaGoodGamesFeast (NOI19_feast)C++20
0 / 100
419 ms16728 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...