题解 P2280 【[HNOI2003]激光炸弹】
Solution
读完题目,我们可以发现:边界上的点是不会被炸掉的。
也就是说,每个边长为
显然,
矩阵前缀和:
那么,我们的时间复杂度变成了
Code
var n,m,i,x,y,v,mx,my,j,ans:longint;
f:array[-1..5010,-1..5010] of longint;
begin
readln(n,m);
for i:=1 to n do begin
readln(x,y,v);
if x>mx then mx:=x;
if y>my then my:=y;
f[x+1,y+1]:=v;
end;
for i:=1 to 5001 do
for j:=1 to 5001 do
f[i,j]:=f[i-1,j]+f[i,j-1]-f[i-1,j-1]+f[i,j];//矩阵前缀和
for i:=m to 5001 do
for j:=m to 5001 do if f[i,j]-f[i-m,j]-f[i,j-m]+f[i-m,j-m]>ans then
ans:=f[i,j]-f[i-m,j]-f[i,j-m]+f[i-m,j-m];//求最值
writeln(ans);
end.