题目描述
时间:1s 空间:256M
题目描述
一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有一个价值vi。
激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为R的正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标将不会被摧毁。
输入格式
第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示xi,yi,vi
输出格式
输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。
#include<bits/stdc++.h>
using namespace std;
long long n,r,a[5010][5010],x,y,v,num;
int main(){
cin>>n>>r;
if(r==0){
cout<<0;
return 0;
}
for(int i=1;i<=n;i++){
cin>>x>>y>>v;
a[y]+=v;
}
for(int i=1;i<=5000;i++){
for(int j=1;j<=5000;j++){
a[i][j]=a[i-1][j]+a[i][j-1]-a[i-1][j-1]+a[i][j];
}
}
for(int i=1;i<=5000-r+1;i++){
for(int j=1;j<=5000-r+1;j++){
num=max(num,a[i+r-1][j+r-1]-a[i-1][j+r-1]-a[i+r-1][j-1]+a[i-1][j-1]);
}
}
cout<<num;
return 0;
}