- 题解
14.激光炸弹
- @ 2026-1-23 12:57:56
#include <iostream>
using namespace std;
const int N = 5010;
int n = 5005,m,r;
int sum[N][N];
int max (int a,int b) {
return a > b ? a : b;
}
int get (int x1,int y1,int x2,int y2) {
return sum[x2][y2] - sum[x1 - 1][y2] - sum[x2][y1 - 1] + sum[x1 - 1][y1 - 1];
}
int main () {
cin >> m >> r;
int maxx,maxy;
for (int i = 1;i <= m;i++) {
int x,y,w;
cin >> x >> y >> w;
x++,y++;
maxx = max (maxx,x);
maxy = max (maxy,y);
sum[x][y] += w;
}
for (int i = 1;i <= n;i++) {
for (int j = 1;j <= n;j++) sum[i][j] += sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1];
}
if (r >= maxx && r >= maxy) {
cout << sum[n][n] << endl;
return 0;
}
int ans = 0;
for (int i = 1;i + r - 1 <= n;i++) {
for (int j = 1;j + r - 1 <= n;j++) ans = max (ans,get (i,j,i + r - 1,j + r - 1));
}
cout << ans << endl;
return 0;
}
0 条评论
目前还没有评论...