题目是二维前缀和,N^2完成维护
S[i,j]=S[i-1,j]+S[i,j-1]+A[i,j],简化操作数据直接输入S中
题目中要注意目标的坐标,往往被包含在x+1,y+1之中
#include<cstdio>
#include<algorithm>
using namespace std;
int f[5005][5005];
int main(){
int n,R;
scanf("%d%d",&n,&R);
int maxx=R,maxy=R;
while(n--){
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
x++;y++;//注意
f[x][y]+=v;
maxx=max(maxx,x);
maxy=max(maxy,y);
}
for(int i=1;i<=maxx;i++){
for(int j=1;j<=maxy;j++){
f[i][j]+=f[i-1][j]+f[i][j-1]-f[i-1][j-1];
}
}
int maxans=0;
for(int i=R;i<=maxx;i++){
for(int j=R;j<=maxy;j++){
maxans=max(maxans,f[i][j]-f[i-R][j]-f[i][j-R]+f[i-R][j-R]);
}
}
printf("%d",maxans);
return 0;
}