首页 > 代码库 > BZOJ1218:[HNOI2003]激光炸弹
BZOJ1218:[HNOI2003]激光炸弹
1218: [HNOI2003]激光炸弹
Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 2375 Solved: 1081
[Submit][Status][Discuss]
Description
一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有一个价值。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为R的正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标将不会被摧毁。 0
Input
输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示
Output
输出文件仅有一个正整数,表示一颗炸弹最多能炸掉地图上总价值为多少的目标(结果不会超过32767)。
Sample Input
2 1
0 0 1
1 1 1
0 0 1
1 1 1
Sample Output
1
HINT
Source
1 #include <bits/stdc++.h> 2 3 inline void read(int &x) 4 { 5 x = 0;char ch = getchar(); 6 char c = ch; 7 while(ch > ‘9‘ || ch < ‘0‘)c = ch, ch = getchar(); 8 while(ch <= ‘9‘ && ch >= ‘0‘)x = x * 10 + ch - ‘0‘, ch = getchar(); 9 if(c == ‘-‘)x = -x;10 }11 inline int min(int a, int b){return a > b ? b : a;}12 inline int max(int a, int b){return a > b ? a : b;}13 14 const int INF = 0x3f3f3f3f; 15 const int MAXN = 5000 + 10;16 17 int q;18 int sum[MAXN][MAXN],R;19 int tmp1, tmp2;20 int n,m;21 22 inline void put()23 {24 for(int i = 1;i <= n;++ i)25 {26 for(int j = 1;j <= m;++ j)27 printf("%d", sum[i][j]);28 putchar(‘\n‘);29 }30 }31 int main()32 {33 scanf("%d %d", &q, &R);34 for(register int i = 1;i <= q;++ i)35 {36 scanf("%d %d", &tmp1, &tmp2);37 tmp1 ++;tmp2 ++;38 scanf("%d", &sum[tmp1][tmp2]);39 n = max(n, tmp1);m = max(m, tmp2);40 }41 for(register int i = 1;i <= 5001;++ i)42 for(register int j = 1;j <= 5001;++ j)43 sum[i][j] += sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];44 int ans = -1;45 for(register int i = 5001;i >= R;-- i)46 for(register int j = 5001;j >= R;-- j)47 ans = max(ans, sum[i][j] - sum[i - R][j] - sum[i][j - R] + sum[i - R][j - R]);48 printf("%d", ans);49 return 0;50 }
BZOJ1218:[HNOI2003]激光炸弹
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。