有些地方算不到。
满分代码:
```c++
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 5;
int s[maxn][maxn];
int n, m;
int main(){
cin >> n >> m;
int maxx = 0, maxy = 0;
for (int i = 1; i <= n; i++){
int x, y;
cin >> x >> y;
maxx = max(maxx, x + 1);
maxy = max(maxy, y + 1);
cin >> s[x + 1][y + 1];
}
for (int i = 1; i < maxn; i++){
for (int j = 1; j < maxn; j++){
s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
}
}
int maxs = 0;
// if (m > maxx) m = maxx;
// if (m > maxy) m = maxy;
for (int i = m; i < maxn; i++){
for (int j = m; j < maxn; j++){
maxs = max(maxs, (s[i][j] - s[i - m][j] - s[i][j - m] + s[i - m][j - m]));
}
}
cout << maxs;
return 0;
}
by AL_Blue @ 2023-06-02 16:47:24
更正一下我发的楼上,就是有些时候炸弹太大,一次性炸下去全部点都没得了,所以得判断一下,代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
const int maxn = 5e3 + 5;
int s[maxn][maxn];
int n, m;
int main(){
cin >> n >> m;
int maxx = 0, maxy = 0;
for (int i = 1; i <= n; i++){
int x, y;
cin >> x >> y;
maxx = max(maxx, x + 1);
maxy = max(maxy, y + 1);
cin >> s[x + 1][y + 1];
}
for (int i = 1; i <= maxx; i++){
for (int j = 1; j <= maxy; j++){
s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
}
}
int maxs = 0;
int m1 = min(m, maxx);
int m2 = min(m, maxy);
for (int i = m1; i <= maxx; i++){
for (int j = m2; j <= maxy; j++){
maxs = max(maxs, (s[i][j] - s[i - m1][j] - s[i][j - m2] + s[i - m1][j - m2]));
}
}
cout << maxs;
return 0;
}
```
by AL_Blue @ 2023-06-02 17:02:53