//激光炸弹 //本质最大子矩阵,再本质最大连续区间,自然用前缀和做 #include <bits/stdc++.h> using namespace std; int arr[5050][5050];//输入矩阵 int ans[5050][5050];//结果矩阵,保存矩阵的所有情况 int main() { int n,i,r,j; cin>>n>>r;//输入炸弹数量和半径 for(i=0;i<n;i++) { int x,y,v; cin>>x>>y>>v;//输入坐标和价值 arr[x+1][y+1]=v;//因为边界是(0,0)不妨把边界拉出去一点,要不后面计算的时候越界 } for(i=0;i<=50001;i++) for(j=1;j<=5001;j++) arr[i][j]+=arr[i][j-1];//行的前缀和 for(j=0;j<=5001;j++) for(i=1;i<=5001;i++) arr[i][j]+=arr[i-1][j];//加上列的前缀和 for(i=0;i<=5001-r;i++) for(j=0;j<=5001-r;j++) ans[i][j]=arr[i][j]-arr[i+r][j]-arr[i][j+r]+arr[i+r][j+r];//计算所有矩阵和 int maxn=0; for(i=0;i<=5000;i++) for(j=0;j<=5000;j++) if(ans[i][j]>maxn) maxn=ans[i][j]; //求最大值 cout<<maxn<<endl;//输出 }