代码:
/*
此代码我是抄袭的
*/
#include <iostream>
using namespace std;
const int N =5010;
int g[N][N];
int main()
{
int n,r,x,y,w;
cin>>n>>r;
int mx=r,my=r;
for(int i=1;i<=n;i++)
{
cin>>x>>y>>w;
x++,y++;//如果输入的x为0的话,x就变成1了,这样就避免了越界等一系列问题
mx=max(mx,x);
my=max(my,y);
g[x][y]=w;
}
for(int i=1;i<=mx;i++)
{
for(int j=1;j<=my;j++)
{
g[i][j]=g[i][j]+g[i-1][j]+g[i][j-1]-g[i-1][j-1];//求第n个区域的和,这个和为正方形的和
}
}
int res=0;
for(int i=r;i<=mx;i++)
{
for(int j=r;j<=my;j++)
{
res=max(res,g[i][j]-g[i-r][j]-g[i][j-r]+g[i-r][j-r]);//求出为r的正方的和的最大值;
}
}
cout<<res<<endl;
return 0;
}