90ptsWA求调
  • 板块P3800 Power收集
  • 楼主_x39_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/29 20:06
  • 上次更新2024/7/29 21:12:43
查看原帖
90ptsWA求调
760100
_x39_楼主2024/7/29 20:06
#include<bits/stdc++.h>
#define up(l,r,i) for(int i=l;i<=r;i++)
typedef long long ll;
using namespace std;
const int N=4e3+5;
int read(){
	int res=0;char c;
	c=getchar();
	while(c<'0'||c>'9') c=getchar();
	while(c>='0'&&c<='9'){
		res=res*10+c-'0';
		c=getchar();
	}return res;
}
ll n,m,k,t,l,r;
ll a[N][N];
ll f[N][N],ans; 
deque<int>q;
int main(){
	n=read();m=read();k=read();t=read();
	int x,y,z;
	up(1,k,i){
		x=read();y=read();z=read();
		a[x][y]=z;
	}
	up(1,n,i){
		l=1-t;r=1;
		while(r<=t+1) {
			while(!q.empty()&&f[i-1][q.back()]<=f[i-1][r]) q.pop_back();
			q.push_back(r);
			r++;
		}
		up(1,m,j){
			while(!q.empty()&&q.front()<l) q.pop_front(); 
			while(!q.empty()&&f[i-1][q.back()]<=f[i-1][r]) q.pop_back();
			q.push_back(r);
			f[i][j]=f[i-1][q.front()]+a[i][j];
			l++;if(r<m)r++;
		}
		while(!q.empty()) q.pop_back();
	}
	up(1,m,i)
		ans=max(ans,f[n][i]);
	printf("%lld\n",ans);
	return 0;
} 

2024/7/29 20:06
加载中...