九敏...(#7WA)
查看原帖
九敏...(#7WA)
497817
羊摆摇楼主2022/7/25 13:31

本蒟蒻调了半天调不出来...

实在看不出哪里错了,有没有dalao帮忙指一下错误,本人真的报废了。

代码中Q是直接存dp下标,所以只开了一个队列(当然也更难纠错了)

WA code:
#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;
} 









2022/7/25 13:31
加载中...