那里出错了(求个助)
  • 板块灌水区
  • 楼主pip202513
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/17 15:11
  • 上次更新2023/11/3 09:20:08
查看原帖
那里出错了(求个助)
399929
pip202513楼主2023/7/17 15:11

DP

/*

5 2

1 2 3 4 5

应输出:12

*/

#include <iostream>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#define N 100005
#define ull unsigned long long
using namespace std;
int n,m,a[N],num[N],head,tail;
ull sum[N],f[N][2],q[N];

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]),sum[i]=sum[i-1]+a[i];
	}
	head=tail=1;
	for(int i=1;i<=n;i++)
	{
		f[i][0]=max(f[i-1][0],f[i-1][1]);
		f[i][1]=f[i][0];
		while(num[head]<i-m&&head<=tail) head++;
		f[i][1]=max(f[i][1],sum[i]+q[head]);
		while(q[tail]<f[i][0]-sum[i]&&head<=tail) tail--;
		q[++tail]=f[i][0]-sum[i]; num[tail]=i;
		cout<<f[i][0]<<" "<<f[i][1]<<endl;
	}
	cout<<max(f[n][0],f[n][1]);
	return 0;
}

2023/7/17 15:11
加载中...