暴力。
但是WA了一发。
凭什么for到5001就过了啊。。。。
难道点权有负?
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 5050 using namespace std; int n,r,mx=0,my=0,x,y,z,sum[maxn][maxn],ans=0; int main() { scanf("%d%d",&n,&r); for (int i=1;i<=n;i++) { scanf("%d%d%d",&x,&y,&z);x++;y++; mx=max(mx,x);my=max(my,y); sum[x][y]+=z; } mx=5001;my=5001; for (int i=1;i<=mx;i++) for (int j=1;j<=my;j++) sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]; for (int i=1;i<=mx-r+1;i++) for (int j=1;j<=my-r+1;j++) ans=max(ans,sum[i+r-1][j+r-1]-sum[i-1][j+r-1]-sum[i+r-1][j-1]+sum[i-1][j-1]); printf("%d\n",ans); return 0; }