0分求助
  • 板块P3800 Power收集
  • 楼主_make_
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/10/27 10:06
  • 上次更新2023/10/27 05:40:30
查看原帖
0分求助
250862
_make_楼主2022/10/27 10:06

下载了一个数据,自己测是对的,但提交上去全部WA

#include<bits/stdc++.h>
using namespace std;

const int N=4e3+5;
int n,m,k,t_,ii,dp[N],l[N],r[N],mm,ans,a[N][N],x,y,v;
struct QUEUE{
	int s,i;
}q[N];

int main(){
	cin>>n>>m>>k>>t_;
	for(int i=1;i<=k;i++) scanf("%d%d%d",&x,&y,&v),a[x][y]=v;
	for(int i=1;i<=n;i++){
		for(int j=1,t=1,w=0;j<=m;j++){
			q[++w]={dp[j],j};
			while(t<w && q[w].s>=q[w-1].s) q[--w]=q[w+1];
			while(t<w && j-q[t].i>t_) t++;
			l[j]=q[t].s+a[i][j];
		}
		mm=ii+1;
		for(int j=m,t=1,w=0;j;j--){
			q[++w]={dp[j],j};
			while(t<w && q[w].s>=q[w-1].s) q[--w]=q[w+1];
			while(t<w && q[t].i-j>t_) t++;
			r[j]=q[t].s+a[i][j];
		}
		for(int j=1;j<=m;j++) dp[j]=max(l[j],r[j]);
	}
	for(int i=1;i<=m;i++) ans=max(ans,dp[i]);
	cout<<ans;
}
2022/10/27 10:06
加载中...