P2280 [HNOI2003]激光炸弹

P2280 [HNOI2003]激光炸弹

题目描述

输入输出格式

输入格式:

输入文件名为input.txt

输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ,vi 。

输出格式:

输出文件名为output.txt

输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。

输入输出样例

输入样例#1:
2 1
0 0 1
1 1 1
输出样例#1:
1

分析

二维前缀和,先预处理出前缀和,然后枚举右下角的点,求最大,注意循环初始条件与结束条件

代码

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 int a[5010][5010];
 5 int main()
 6 {
 7     int n,r,ans = 0;
 8     scanf("%d%d",&n,&r);
 9     for (int x,y,z,i=1; i<=n; ++i)
10     {
11         scanf("%d%d%d",&x,&y,&z);
12         a[x+1][y+1] = z;
13     }
14     for (int i=1; i<=5001; ++i)
15         for (int j=1; j<=5001; ++j)
16             a[i][j] = a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];
17     for (int i=0; i<5001-r; ++i)    //从0开始 
18         for (int j=0; j<5001-r; ++j)
19             ans = max(ans,a[i+r][j+r]-a[i+r][j]-a[i][j+r]+a[i][j]);
20     printf("%d",ans);    
21     return 0;
22 }
原文地址:https://www.cnblogs.com/mjtcn/p/7151153.html