题目传送门
【题目大意】
【思路分析】
利用二维前缀和,找到最大值,即$$ans=max\{a[i][j]-a[i-R][j]-a[i][j-R]+a[i-R][j-R]\}(1\le i,j<max)$$
【代码实现】
1 #include<iostream>
2 #include<cstdio>
3 #define rg register
4 #define go(i,a,b) for(rg int i=a;i<=b;i++)
5 using namespace std;
6 const int M=
5000;
7 int n,R,x,y,z,a[M+
2][M+
2],ans=
0;
8 int main(){
9 scanf(
"%d%d",&n,&
R);
10 go(i,
1,n) scanf(
"%d%d%d",&x,&y,&z),a[x+
1][y+
1]+=z;
//这里注意处理一下不能覆盖边界
11 go(i,
1,M) go(j,
1,M) a[i][j]+=a[i-
1][j];
12 go(i,
1,M) go(j,
1,M) a[i][j]+=a[i][j-
1];
13 go(i,R,M) go(j,R,M)
14 ans=max(ans,a[i][j]+a[i-R][j-R]-a[i-R][j]-a[i][j-
R]);
15 cout<<
ans;
16 return 0;
17 }
代码戳这里
转载于:https://www.cnblogs.com/THWZF/p/11244699.html