社区讨论
90pts 求调
P1484种树参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mlhdycl3
- 此快照首次捕获于
- 2026/02/11 10:03 上个月
- 此快照最后确认于
- 2026/02/12 20:10 4 周前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[300005], f[300005], g[300005];
signed main() {
int n, k; cin >> n >> k;
for(int i = 1;i <= n;i++)
cin >> a[i];
int L = -1e6, R = 1e6, ans = 0;
while(L <= R) {
int mid = (L + R) >> 1;
for(int i = 1;i <= n;i++) a[i] -= mid;
f[0] = 0; f[1] = max(0ll, a[1]);
if(f[1] == 0) g[1] = 0; else g[1] = 1;
for(int i = 2;i <= n;i++) {
if(f[i-1] > (f[i-2] + a[i]))
g[i] = g[i-1], f[i] = f[i-1];
else g[i] = g[i-2] + 1, f[i] = f[i-2] + a[i];
} if(g[n] <= k) ans = max(ans, f[n] + g[n] * mid), R = mid - 1;
else L = mid + 1;
for(int i = 1;i <= n;i++) a[i] += mid;
} cout << ans << endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...