单调队列0pts求调 4wa 6mle
查看原帖
单调队列0pts求调 4wa 6mle
750444
LogicVortex楼主2024/10/4 08:14
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=4000;
int n,m,k,t,ans=-1e16,a[N+5][N+5],dp[N+5][N+5],qu[N+5][N+5];
void que(int x){
	queue<int> q;
	int head=1,tail=0;
	q.push(dp[x][1]);
	while(tail<m){
		if(head<=m){
			head++;
		}
		else{
			tail++;
		}
		while(!q.empty()&&head-tail>2*t+1){
			tail++;
			q.pop();
		}
		while(!q.empty()&&q.front()<=dp[x][head]){
			tail++;
			q.pop();
		}
		q.push(dp[x][head]);
		qu[x+1][head-1]=q.front();
	}
}
signed main(){
	cin>>n>>m>>k>>t;	
	for(int i=1;i<=k;i++){
		int x,y,v;
		cin>>x>>y>>v;
		a[x][y]=v;
	}
	for(int i=1;i<=n;i++){
		que(i-1); 
		for(int j=1;j<=m;j++){
			dp[i][j]=a[i][j]+qu[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		ans=max(ans,dp[n][i]);										
	}
	cout<<ans<<endl;
	return 0;
}
2024/10/4 08:14
加载中...