题目:输入N个宝物的位置和价值,给出一个炸弹的炸弹范围(是一个正方形)的边长,找出一颗炸弹最多能炸掉的最大价值

题目中的宝物放在一个(x,y)的点上,而我们的炸弹是炸一个(r,r)的范围,所以如果一个点恰好在正方形的边上,是不会被摧毁的,上图炸掉的宝物数量为0

如图,当把这个炸弹范围拖动的时候,一个点正好就被放在了炸弹区域内,说明这个宝物可以被炸掉,所以不妨把r*r矩阵想成(r-1)(r-1)

我们可以运用前缀和的思想:快速求(x1~x2,y1~y2)的和来做这一道题,一次求和的时间复杂度是O(1)的,而我们总共有5000x5000个点,是可以满足条件的

#include <iostream>
#include <algorithm>
using namespace std;
const int N = 5005;
int s[N][N];/*思路:1.输入(0~5001,0~5001)的所有宝物,并求他们的二位前缀和矩阵2.枚举边长为(r-1)(r-1)的所有矩阵,然后找到一个炸弹炸掉的最大宝物价值
*/
int query(int x1, int y1, int x2, int y2)
{return s[x2][y2] - s[x2][y1 - 1] - s[x1][y2 - 1] + s[x1 - 1][y1 - 1];
}int main()
{int n, r;cin >> n >> r;r = min(5002, r);  //r最大值可能是10^9越界了for (int i = 0;i < n;i++){int x, y, w;cin >> x >> y >> w;s[++x][++y] += w;    //因为有可能多个宝物在一个点上,所以要用+=//二分前缀和要用到x-1的值,所以让x++,不考虑边界问题}for(int i=1;i<=5002;i++)for (int j = 1;j <= 5002;j++){s[i][j] += s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];//将原来的数组转化为前缀和数组}int res = 0;//x++后,取值[1,5001]for(int i=r;i<=5001;i++)for (int j = r;j <= 5001;j++){//i,j表示的是矩形的右下角,i-r,j-r表示的是左上角//由于是(r-1)(r-1)的正方形,所以左上角顶点(j-(r-1)-1)=(j-r)res = max(res, s[i][j] - s[i - r][j] - s[i][j - r] + s[i - r][j - r]);//等于res=max(res,query(i-r+1,j-r+1,i,j));}cout << res;
}

99. 激光炸弹(前缀和)相关推荐

  1. AcWing 99. 激光炸弹 (二维前缀和)

    99. 激光炸弹 题意 给定一个5000x5000的地图 随机在该地图上放置物品,物品具有价值,且不同物品可以放置在同一位置 有一个炸弹的爆炸范围为RxR的正方形 问该炸弹在地图上爆炸一次,最多能摧毁 ...

  2. 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和

    文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...

  3. 99. 激光炸弹 java 题解 (前缀和)

    输入样例: 2 1 0 0 1 1 1 1 输出样例: 1 解题思路: 先求出二维数组的前缀和数组,在这个数组上找满足条件的最大子矩阵的权值. Java代码: import java.io.*;pub ...

  4. P2280 [HNOI2003]激光炸弹(二维前缀和的简单应用)难度⭐⭐⭐

    P2280 [HNOI2003]激光炸弹 输出 2 1 0 0 1 1 1 1 输入 1 这道题就是最基础的二位前缀和的应用,如果不会的话可以点击下方链接学习哟 前缀和差分详解 #include< ...

  5. [HNOI2003]激光炸弹(二维前缀和+大坑点)

    地图上有 N 个目标,用整数 Xi,Yi表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目 ...

  6. 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】

    [HNOI2003]激光炸弹 题目描述  一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...

  7. 激光炸弹(BZOJ1218)

    激光炸弹(BZOJ1218) 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标.现在地图上有n(N<=10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目标在地图上 ...

  8. P2280 [HNOI2003]激光炸弹

    P2280 [HNOI2003]激光炸弹 题目描述 输入输出格式 输入格式: 输入文件名为input.txt 输入文件的第一行为正整数n和正整数R,接下来的n行每行有3个正整数,分别表示 xi,yi ...

  9. bzoj1218[HNOI2003]激光炸弹

    bzoj1218[HNOI2003]激光炸弹 题意: 坐标系上有n个目标,每个目标有一个价值,现在求一个边与坐标轴平行,边长为R的正方形,使在其内部(原题是不包括边界,然而实际上不是这样)的目标价值最 ...

最新文章

  1. 【CVPR2022】双曲图像分割
  2. 003_SQL语言简介
  3. apache配置文件httpd.conf----小白福利
  4. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
  5. 基于注册中心的Dubbo服务
  6. MySQL索引背后的数据结构及算法原理(转)
  7. php获取本机ip外网地址,php获取本机ip(远程IP地址)
  8. windows系统 安装MongoDB
  9. Leetcode-5148 Binary Tree Coloring Game(二叉树着色游戏)
  10. 跨域cookie设置
  11. Redis 管理工具 TreeNMS
  12. Laravel Collect集合用pluck取多维数组中某个字段值
  13. SpringBoot整合elasticsearch (java整合es)
  14. Evolutionary Spectral Clustering by Incorporating Temporal Smoothness论文整理
  15. LocalDate的用法与String互转
  16. 赵小楼《天道》《遥远的救世主》深度解析(126)说老实话办老实事,实事求是
  17. 具有先天开源优势的Web前端技术社区里也是波澜不惊
  18. [转载评论]月入1.5万 中产阶层该买什么车?
  19. 去静态化 php,PHP页面静态化 - 菜鸟要飞啊的IT小窝 - OSCHINA - 中文开源技术交流社区...
  20. 私域生态中的“消费者共创”:超级用户如何让Lego重焕生机

热门文章

  1. oracle trace跟踪,oracle数据库跟踪工具 — oracle-tech
  2. 中职计算机专业英语课件,计算机专业英语课件—unit 1.ppt
  3. matlab:分析控制系统稳定性综合实例
  4. 软件测试面试题整理(七)之性能安全篇
  5. 关于安装Adobe CC系列Photoshop等软件时报错无法写入注册表值错误代码160问题的解决方法
  6. android微信升级后还原,安卓微信好友一键恢复靠谱吗,微信一键还原后果
  7. 《java8高级应用与开发》读书笔记(二)
  8. python库中的ssl.py
  9. 轻松搭建影音服务器(转)
  10. javaweb:request请求对象(5)