题目:激光炸弹
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 5010;
int w[N][N];
int main(){
int n, r;
int x,y,W, max_x,max_y;
cin >> n >> r;
r = min(5001,r);
//max_x ,max_y先初始化为r,因为要找的区域必须是大于r的区域的,否则后面的answer没法被更新
max_x = max_y = r;
while(n--){
cin >> x >> y >> W;
x++,y++;
w[x][y] += W;
max_x = max(x,max_x);
max_y = max(y,max_y);
}
//注意等于max_x和max_y
for(int i = 1; i <= max_x; i++){
for(int j =1; j <= max_y; j++){
w[i][j] = w[i][j]+w[i-1][j]+w[i][j-1]-w[i-1][j-1];
}
}
int answer = 0;
for(int i = r; i <= max_x; i++){
for(int j =r; j <= max_y; j++){
answer = max(answer,w[i][j]-w[i-r][j]-w[i][j-r]+w[i-r][j-r]);
}
}
cout << answer;
return 0;
}