正题
评测链接:https://www.luogu.org/record/show?rid=9634929
大意
有nn个东西,在的棋盘上,炸弹一次可以炸r∗rr∗r的地方,使炸到的东西的价值最大。
解题思路
这道题我们可以用一个二维前缀和快速计算r*r的范围的最大值,然后暴力枚举
正解扫描线
具体使用方法详见:https://blog.csdn.net/Mr_wuyongcong/article/details/81063210
代码
#include<cstdio>
#include<algorithm>
using namespace std;
int n,r,x,y,w,s[5011][5011],maxs;
int main()
{scanf("%d%d",&n,&r);for(int i=1;i<=n;i++){scanf("%d%d%d",&x,&y,&w);s[x+1][y+1]=w;}for(int i=1;i<=5001;i++)for(int j=1;j<=5001;j++)s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];//计算前缀和for(int i=r;i<=5001;i++)for(int j=r;j<=5001;j++)maxs=max(maxs,s[i][j]-s[i-r][j]-s[i][j-r]+s[i-r][j-r]);//暴力枚举printf("%d",maxs);
}