【BZOJ 1218】 [HNOI2003]激光炸弹
【链接】 我是链接,点我呀:)
【题意】
【题解】
一开始以为可以炸多次。 然后发现是一次。 那么久直接做个前缀和就好了枚举正方形的左上角。
然后刚好和网格对齐的话。
肯定没有放在(x+0.1,y+0.1)这个地方好。
这样可以把边缘的炸掉。
然后为了方便处理。
x和y都递增1.
【代码】
#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 5e3;
int n,r,a[N+10][N+10];
int main()
{
scanf("%d%d",&n,&r);
for (int i = 1;i <= n;i++){
int x,y,v;
scanf("%d%d%d",&x,&y,&v);
x++,y++;
a[x][y]+=v;
}
for (int i = 1;i <= N+1;i++)
for (int j = 1;j <= N+1;j++)
a[i][j] += a[i][j-1]+a[i-1][j]-a[i-1][j-1];
int ans = 0;
for (int i = r;i <= N+1;i++)
for (int j = r;j<=N+1;j++)
ans = max(ans,a[i][j]-a[i][j-r]-a[i-r][j]+a[i-r][j-r]);
printf("%d\n",ans);
return 0;
}