rt,样例都没过,单调队列优化DP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5;
int n, k, a[N], dp[N], sum, ans = -1e9;
deque<int> dq;
void update(int x)
{
while(!dq.empty() && dp[x] <= dp[dq.back()])
dq.pop_back();
dq.push_back(x);
return;
}
signed main()
{
cin >> n >> k;
for(int i = 1; i <= n; i++)
cin >> a[i], sum += a[i];
for(int i = 1; i <= n; i++)
{
int q = dq.empty() ? 0 : dq.front();
dp[i] = dp[q] + a[i];
// cout << dp[i] << " " << q << "\n";
update(i);
while(!dq.empty() && i - dq.front() > k)
dq.pop_front();
}
for(int i = n - k; i <= n; i++)
ans = max(ans, sum - dp[i]);
cout << ans;
return 0;
}