本蒟蒻调了半天调不出来...
实在看不出哪里错了,有没有dalao帮忙指一下错误,本人真的报废了。
代码中Q是直接存dp下标,所以只开了一个队列(当然也更难纠错了)
#include <bits/stdc++.h>
using namespace std;
#define LL long long
typedef const int Int;
Int N=1e5+5;
LL n,m;
LL A[N];
LL dp[N];
LL cnt;
LL Q[N],front=1,back=1;
void read(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
scanf("%lld",&A[i]);
cnt+=A[i];
}
}
int main(){
LL ret=INT_MAX;
read();
if(n<=m){
printf("%lld",cnt);
return 0;
}
Q[back++]=0;
for(int i=1;i<=n;i++){
while(front<back&&Q[front]<i-m-1)front++;
dp[i]=dp[Q[front]]+A[i];
while(front<back&&dp[Q[back-1]]>=dp[i])back--;
Q[back++]=i;
// for(int j=front;j<=back-1;j++)cout<<Q[i]<<" ";
// cout<<endl;
}
// cout<<endl;
// for(int i=1;i<=n;i++)cout<<dp[i]<<endl;
// cout<<endl;
for(int i=n-m;i<=n;i++)ret=min(ret,dp[i]);
printf("%lld",cnt-ret);
return 0;
}