zoukankan      html  css  js  c++  java
  • bzoj1218[HNOI2003]激光炸弹

    bzoj1218[HNOI2003]激光炸弹

    题意:

    坐标系上有n个目标,每个目标有一个价值,现在求一个边与坐标轴平行,边长为R的正方形,使在其内部(原题是不包括边界,然而实际上不是这样)的目标价值最大。

    题解:

    预处理一下以横纵坐标为节点的二维前缀和,然后枚举正方形右上角坐标即可。注意可以将坐标系向右上移动一个单位使前缀和不用考虑负数。反思:蒟蒻好弱啊,枚举时i和j的边界都应该是所以节点横坐标最大值与纵坐标最大值的最大值。蒟蒻一开始没注意到这一点,以为自己预处理写错。改来改去,WA来WA去。最后对着标程一点点改才发现问题。QAQ

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #define maxn 5500
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 using namespace std;
     7 
     8 int sum[maxn][maxn],n,mxxy,r,mx;
     9 int main(){
    10     scanf("%d%d",&n,&r); mxxy=mx=0;
    11     inc(i,1,n){
    12         int x,y,z; scanf("%d%d%d",&x,&y,&z); x++; y++;
    13         mxxy=max(mxxy,x); mxxy=max(mxxy,y); sum[x][y]+=z;
    14     }
    15     inc(i,1,mxxy)inc(j,1,mxxy)
    16         sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
    17     inc(i,r,mxxy)inc(j,r,mxxy)
    18         mx=max(mx,sum[i][j]-sum[i][j-r]-sum[i-r][j]+sum[i-r][j-r]);
    19     printf("%d",mx); return 0;
    20 }

    20160602

  • 相关阅读:
    git log中文乱码问题
    局域网映射公网IP
    Android Studio 的一些配置
    Android Studio的安装
    adb的安装
    python的安装
    CentOS 7 上部署 java web 项目
    SQL——SQL语句总结(8)
    SQL——SQL语句总结(7)
    SQL——SQL语句总结(6)
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5689449.html
Copyright © 2011-2022 走看看