这个题让求在一个二维的图表内,计算边长为R的正方形的总价值
这个题就是反复对这个思路的运用 首先将每一点的与(0,0)所围成的面积的权重求出来
g[i][j]+=g[i-1][j]+g[i][j-1]-g[i-1][j-1]
然后下一步就是挨个计算面积为R的平方的处在该区域的各个地方的权值。
int res=0;
res=max(res,g[i-R][j]+g[i][j-R]-g[i-R][j-R];
下面是我的代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N=5010;
int map[N][N];
int main()
{
int N,R;
cin >> N >> R;
int n = R,m = R;
for(int i = 0,x,y,w;i < N;i ++ )
{
cin>> x >> y >> w;
x+=1,y+=1;
map[x][y]+=w;
n=max(n,x);
m=max(m,y);
}
for(int i = 1;i <= n; i ++ )
for(int j = 1;j <= m; j ++ )
map[i][j]+=map[i-1][j]+map[i][j-1]-map[i-1][j-1];
int res = 0;
for(int i = R;i <= n; i ++ )
for(int j = R; j <=m; j ++ )
res=max(res,(map[i][j]-map[i-R][j]-map[i][j-R]+map[i-R][j-R]));
cout<< res <<endl;
return 0;
}
我们一直在努力,欢迎一起交流!