0pts求助
查看原帖
0pts求助
520338
Luckies楼主2023/6/9 20:56

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;
}
2023/6/9 20:56
加载中...