题目描述
一种新型的激光炸弹,可以摧毁一个边长为 m 的正方形内的所有目标。
现在地图上有 n 个目标,用整数 xi,yi 表示目标在地图上的位置,每个目标都有一个价值 vi。
激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为 �m 的边必须与 x 轴,y 轴平行。若目标位于爆破正方形的边上,该目标不会被摧毁。
现在你的任务是计算一颗炸弹最多能炸掉地图上总价值为多少的目标。
输入格式
输入的第一行为整数 n 和整数 m。
接下来的 n 行,每行有 33 个整数 x,y,v,表示一个目标的坐标与价值。
输出格式
输出仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标。
样例 #1
样例输入 #1
2 1
0 0 1
1 1 1
样例输出 #1
1
提示
对于 100%的数据,保证 1≤n≤104,0≤xi,yi≤5×103,1≤m≤5×103,1≤vi<100。
#include<bits/stdc++.h>
using namespace std;
int sum[5005][5005];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
sum[x+1][y+1]=z;
}
for(int i=1;i<=5001;i++){
for(int j=1;j<=5001;j++){
sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+sum[i][j];
}
}
int maxx=-1;
for(int i=m;i<=5001;i++){
for(int j=m;j<=5001;j++){
int v=sum[i][j]-sum[i][j-m]-sum[i-m][j]+sum[i-m][j-m];
maxx=max(maxx,v);
}
}
printf("%d",maxx);
return 0;
}
本题考查 二位前缀和
题目难度 2星