- 修剪草坪
1
- @ 2026-8-7 10:12:00
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int, int>
void solve() {
int n, k;
cin >> n >> k;
vector<ll> sum(n + 1);
for (int i = 1; i <= n; i++) {
cin >> sum[i];
sum[i] += sum[i - 1];
}
const ll inf = 1e18;
vector<ll> dp(n + 2, -inf);
dp[0] = 0;
deque<int> q; q.push_back(0);
for (int i = 1; i <= n + 1; i++) {
dp[i] = dp[i - 1];
while (q.size() && i - 1 - q.front() > k) q.pop_front();
assert(q.size());
dp[i] = max(dp[i], dp[q[0]] - sum[q[0]] + sum[i - 1]);
while (q.size() && dp[i] - sum[i] >= dp[q.back()] - sum[q.back()]) q.pop_back();
q.push_back(i);
}
cout << dp[n + 1] << '\n';
}
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
int t = 1;
// cin >> t;
while (t--) solve();
return 0;
}
/*
g++ -std=c++17 1.cpp -o 1 && 1 < in.txt > out.txt
g++ -std=c++17 1.cpp -o 1 && ./1 < in.txt > out.txt
200:5488
150:6224
80 :6772
40 :7218
300 5649
250:5514
*/
0 条评论
目前还没有评论...
信息
- ID
- 569
- 时间
- ms
- 内存
- MiB
- 难度
- 6
- 标签
- 递交数
- 26
- 已通过
- 10
- 上传者