【解题报告】 [HNOI2003]激光炸弹
题目:luogu P2280
在这样可爱的夜晚,调试题目恐怕是最爽的选择了
附:https://www.luogu.org/record/list?user=136889
在这么多次失败下我终于成功了
解题思路:
前缀和与拆分
这是一道简单题,但是我却调试了那么多次没调出来,竟然是循环的问题
rp--。。
建立一个二维数组,储存某个区域的目标的数量,然后就使用一个二维前缀和,就可以弄出来了,注意因为时间的原因,在输入的时候也就直接输入了,我那么多次就是因为超时
AC代码
#include <iostream>
using namespace std;
const int maxn=5005;
int r,n;
int s[maxn][maxn];
int ans;
int x,y,w;
int max(int a,int b)
{
return a>b? a:b;
}
int main()
{
cin>>n>>r;
for(int i=1;i<=n;i++)
{
cin>>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=0;i<=5001-r;i++)
{
for(int j=0;j<=5001-r;j++)
ans=max(ans,s[i][j]-s[i+r][j]-s[i][j+r]+s[i+r][j+r]);
}
cout<<ans<<endl;
return 0;
}