【解题报告】 [HNOI2003]激光炸弹
在这样可爱的夜晚,调试题目恐怕是最爽的选择了
附:https://www.luogu.org/record/list?user=136889
在这么多次失败下我终于成功了
解题思路:
前缀和与拆分
这是一道简单题,但是我却调试了那么多次没调出来,竟然是循环的问题
rp–。。
建立一个二维数组,储存某个区域的目标的数量,然后就使用一个二维前缀和,就可以弄出来了,注意因为时间的原因,在输入的时候也就直接输入了,我那么多次就是因为超时
AC代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| #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; }
|