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

    题面

    link

    solution

    水题一枚,题目意思是给出n个点,每个点有一个价值,问一个边长为r的点最大能获得多大价值。

    维护一个二维前缀和即可。

    如果我们要求红色部分的和,是不是用整个有颜色部分的正方形的面积S - 黄色 - 绿色 - 蓝色

    那么怎么利用前缀和的知识来求呢。

    二维中,前缀和代表某点相对于矩阵左上角的矩形区域的面积。

    所以可以推出ans = map[5][5]-map[5][5-2-1]-map[2][5-2-1]+map[2][2]这里为什么是5-2-1 呢, 5代表要求的点, 2代表边长

    这道题有一个坑,就是边界上的点不算,所以我们要求边长为R-1的矩形.

    code

    送上AC代码

     1 #include<stdio.h>
     2 #include<iostream>
     3 #include<math.h>
     4 using namespace std;
     5 int map[5005][5005]={0};
     6 int main()
     7 {
     8     int N,R;
     9     int x,y,w;
    10     cin>>N>>R;
    11     int n = R,m = R;
    12     for(int i=0;i<N;i++)
    13     {
    14         cin>>x>>y>>w;
    15         x++; y++;
    16         map[x][y]+=w;
    17         n = max(n,x);
    18         m = max(m,y);
    19     }
    20     for(int i=1;i<=n;i++)
    21     {
    22         for(int j=1;j<=m;j++)
    23         {
    24             map[i][j] +=map[i-1][j]+map[i][j-1]-map[i-1][j-1];
    25         }
    26     }
    27     int ans = 0;
    28     for(int i=R;i<=n;i++)
    29     {
    30         for(int j=R;j<=m;j++)
    31         {
    32             int tmp = map[i][j]-map[i-R][j]-map[i][j-R]+map[i-R][j-R];
    33             ans = max(ans,tmp);
    34         }
    35     }
    36     cout<<ans<<endl;
    37  }
  • 相关阅读:
    webpack配置Jquery全局包及全局包插件
    webpack安装及使用
    Anywhere 随启随用的静态文件服务器
    sourcetree基本使用
    左边固定右边自适应的布局
    如何顺畅使用sourcetree可视化工具
    gulp前端自动化构建工具
    原生DOM操作方法小结
    java Scanner
    java 面向对象 封装
  • 原文地址:https://www.cnblogs.com/zi-nai-boboyang/p/11437109.html
Copyright © 2011-2022 走看看