1.题目链接。我们考虑以(x,y)为右下角,(1,1)为左上角的这个矩阵里面所有价值和,统计这样的前缀和,然后枚举即可。
#include<bits/stdc++.h>
using namespace std;
const int N = 6000;
#pragma warning(disable:4996)
int n, r, sum[N][N];
int main()
{
scanf("%d%d", &n, &r);
for (int i = 1; i <= n; i++)
{
int x, y, z;
scanf("%d%d%d", &x, &y, &z);
sum[x + 1][y + 1] = z;
}
for (int i = 1; i <=5001; i++)
for (int j = 1; j <=5001; j++)
sum[i][j] += sum[i][j - 1];
for (int i = 1; i <=5001; i++)
for (int j = 1; j <=5001; j++)
sum[i][j] += sum[i - 1][j];
int ans = -1;
for (int i = r; i <= 5001; i++)
for (int j = r; j <= 5001; j++)
ans = max(ans,sum[i][j] + sum[i - r][j - r] - sum[i - r][j] - sum[i][j - r]);
cout << ans << endl;
}