社区讨论

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 条回复,欢迎继续交流。

正在加载回复...