AcWing 99. 激光炸弹
原题链接
简单
作者:
Aleia
,
2024-10-08 14:53:38
,
所有人可见
,
阅读 2
#include <iostream>
using namespace std;
const int N = 5010;
int s[N][N];
int n,m;
int main()
{
int cnt,r;
cin>>cnt>>r;
r = min(5001,r);
n = m = r;//边界
while(cnt --)
{
int x,y,w;
cin>>x>>y>>w;
x++,y++;//坐标下移一格
s[x][y] += w; //多个目标点在同一位置
n = max(n,x),m = max(m,y);
}
//二维前缀和
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
s[i][j] += s[i-1][j]+s[i][j-1] - s[i-1][j-1];
int res = 0;
//枚举矩形右下角的点
for(int i=r;i<=n;i++)
for(int j=r;j<=m;j++)
res = max(res,s[i][j] - s[i-r][j] -s[i][j-r] + s[i-r][j-r]);
cout<<res<<endl;
return 0;
}