【题目链接】
https://www.lydsy.com/JudgeOnline/problem.php?id=1218
【算法】
二维前缀和
【代码】
#include<bits/stdc++.h> using namespace std; #define calc(xa,ya,xb,yb) s[xb][yb] - s[xa-1][yb] - s[xb][ya-1] + s[xa-1][ya-1] int n,r,i,j,x,y,c,mx; int s[5005][5005]; template <typename T> inline void read(T &x) { int f = 1; x = 0; char c = getchar(); for (; !isdigit(c); c = getchar()) { if (c == '-') f = -f; } for (; isdigit(c); c = getchar()) x = (x << 3) + (x << 1) + c - '0'; x *= f; } template <typename T> inline void write(T x) { if (x < 0) { putchar('-'); x = -x; } if (x > 9) write(x/10); putchar(x%10+'0'); } template <typename T> inline void writeln(T x) { write(x); puts(""); } int main() { read(n); read(r); for (i = 1; i <= n; i++) { read(x); read(y); read(c); s[x+1][y+1] += c; } for (i = 1; i <= 5001; i++) { for (j = 1; j <= 5001; j++) { s[i][j] = s[i-1][j] + s[i][j-1] - s[i-1][j-1] + s[i][j]; } } for (i = r; i <= 5001; i++) { for (j = r; j <= 5001; j++) { if (calc(i-r+1,j-r+1,i,j) > mx) mx = calc(i-r+1,j-r+1,i,j); } } writeln(mx); return 0; }