题目链接
https://www.lydsy.com/JudgeOnline/problem.php?id=1218
分析
O ( n 2 ) O(n ^ 2) O(n2) 复杂度枚举选中矩形右下角,根据 R R R 即可确定选中矩形,在借助二维前缀和 O ( 1 ) O(1) O(1) 求出此时答案
AC代码
#include <cstdio>
#include <algorithm>
using namespace std;
inline int read() {
int num = 0;
char c = getchar();
while (c < '0' || c > '9') c = getchar();
while (c >= '0' && c <= '9')
num = num * 10 + c - '0', c = getchar();
return num;
}
const int maxn = 5e3 + 5;
int map[maxn][maxn];
int main() {
int n = read(), r = read(), ans = 0;
for (int i = 1; i <= n; ++i)
map[read() + 1][read() + 1] = read();
for (int i = 1; i <= 5001; ++i)
for (int j = 1; j <= 5001; ++j) {
map[i][j] += map[i - 1][j] + map[i][j - 1] - map[i - 1][j - 1];
if (i >= r && j >= r)
ans = max(ans, map[i][j] - map[i - r][j] - map[i][j - r] + map[i - r][j - r]);
}
printf("%d", ans);
return 0;
}