제출 #1209947

#제출 시각아이디문제언어결과실행 시간메모리
1209947raphaeltfaFeast (NOI19_feast)C++20
18 / 100
888 ms23872 KiB
#include <bits/stdc++.h> using namespace std; #define int long long pair<int, int> lambda_func(int lmb, const vector<int> &base){ vector<vector<pair<int, int>>> dp(base.size(), vector<pair<int, int>> (2, {0, 0})); dp[0][0] = {0, 0}, dp[0][1] = {base[0] - lmb, 1}; for(int i = 1; i < base.size(); i++){ dp[i][0] = max(dp[i - 1][0], dp[i - 1][1]); dp[i][1] = max( make_pair(dp[i - 1][0].first + base[i] - lmb, dp[i - 1][0].second + 1), make_pair(dp[i - 1][1].first + base[i], dp[i - 1][1].second + 1)); } return max(dp.back()[0], dp.back()[1]); } signed main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int n, m; cin >> n >> m; vector<int> base(n); for(int & i : base) cin >> i; int left = 0, right = 1e18; while(left < right){ int mid = (left + right + 1) / 2; pair<int, int> res = lambda_func(mid, base); if(res.second >= m) left = mid; else right = mid - 1; } int res = lambda_func(left, base).first + left * m; cout << res << 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...