单调队列DP,90pts求调
查看原帖
单调队列DP,90pts求调
1113503
xixiyan楼主2024/9/27 06:39

rt,WA on#7,已红温

#include<bits/stdc++.h>
using namespace std;
long long n,m,a[100001],h,t=1;
long long dp[100001];
long long qu[100001];
int main(){
	cin>>n>>m;
	long long sum=0;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
		sum+=a[i];
	}
	qu[++t]=0;m++;
	for(long long i=1;i<=n;i++){
		while( h<t && qu[h]+m<i ) h++;
		dp[i]=dp[qu[h]]+a[i];
		while(h<t&&dp[qu[t-1]]>=dp[i]) t--;
		qu[t++]=i;
	//	cout<<dp[i]<<' ';
	}
	long long ans=2147483647;

	for(long long i=n-m+1;i<=n;i++){
		if(dp[i]<ans) ans=dp[i];
	}
	cout<<sum-ans;
	return 0;
}
2024/9/27 06:39
加载中...