• bzoj 1218 [HNOI2003]激光炸弹 二维前缀和


     [HNOI2003]激光炸弹

    Time Limit: 10 Sec  Memory Limit: 162 MB
    Submit: 3022  Solved: 1382
    [Submit][Status][Discuss]

    Description

    一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置,每个目标都有一个价值。激光炸弹的投放是通过卫星定位的,但其有一个缺点,就是其爆破范围,即那个边长为R的正方形的边必须和x,y轴平行。若目标位于爆破正方形的边上,该目标将不会被摧毁。 

    Input

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

    Output

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

    Sample Input

    2 1
    0 0 1
    1 1 1

    Sample Output

    1

    HINT

     
     1 #include<cstring>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<iostream>
     5 #include<cmath>
     6 
     7 #define N 5007
     8 using namespace std;
     9 inline int read()
    10 {
    11     int x=0,f=1;char ch=getchar();
    12     while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
    13     while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
    14     return x*f;
    15 }
    16 
    17 int n,r,ans;
    18 int sum[N][N];
    19 
    20 int main()
    21 {
    22     n=read(),r=read();
    23     for (int i=1;i<=n;i++)
    24     {
    25         int x=read(),y=read(),z=read();
    26         sum[x+1][y+1]+=z;
    27     }
    28     for (int i=1;i<=5001;i++)
    29         for (int j=1;j<=5001;j++)
    30             sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
    31     for (int i=r;i<=5001;i++)
    32         for (int j=r;j<=5001;j++)
    33             ans=max(ans,sum[i][j]+sum[i-r][j-r]-sum[i-r][j]-sum[i][j-r]);
    34     printf("%d
    ",ans);
    35 }
  • 相关阅读:
    POJ 3159 :Candies 【线性差分约束 链式前向星 栈优化SPFA】
    APM系统SkyWalking介绍
    ELK架构下利用Kafka Group实现Logstash的高可用
    每个人都应有自己的产品
    几行代码养只猫,心情瞬间好多了
    Redis删除特定前缀key的优雅实现
    每个人都应有自己的作品
    Nginx的几个常用配置和技巧
    Nginx与安全有关的几个配置
    开源推荐
  • 原文地址:https://www.cnblogs.com/fengzhiyuan/p/8835029.html
Copyright © 2020-2023  润新知