99. 激光炸弹

题意

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

思路

  • 枚举该正方形在地图中所有可能出现的位置
  • 利用二维前缀和计算在正方形范围内物品的价值和
  • 找出最大的那一个价值和
class Main {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));String[] split;// 目标数与正方形边长int n, r;// 目标坐标与权值int x, y, w;// 地图int[][] map = new int[5010][5010];// 前缀和矩阵int[][] S = new int[5010][5010];void run() throws Exception {split = reader.readLine().split(" ");n = Integer.parseInt(split[0]);r = Integer.parseInt(split[1]);while (n-- > 0) {split = reader.readLine().split(" ");x = Integer.parseInt(split[0]);y = Integer.parseInt(split[1]);w = Integer.parseInt(split[2]);// 输入的坐标(0, 0) 相当于 map中(1, 1)map[x +  1][y +  1] += w;}// 求出前缀和矩阵for (int i = 1 ; i <= 5001; i++) {for (int j = 1; j <= 5001; j++) {S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + map[i][j];}}int res = -Integer.MAX_VALUE;// 枚举正方形在地图中出现的位置,(i, j)是正方形的右上角坐标for (int i = 1; i <= 5001; i++) {if (i + r - 1 > 5001) break;for (int j = 1; j <= 5001; j++) {if (j + r - 1 > 5001) break;// 计算出正方形右下角坐标,然后通过前缀和矩阵计算子矩阵和int x1 = i, y1 = j;int x2 = i + r - 1, y2 = j + r - 1;int sum = S[x2][y2] - S[x1 - 1][y2] - S[x2][y1 - 1] + S[x1 - 1][y1 - 1];res = Math.max(sum, res);}}System.out.println(res);}public static void main(String[] args) throws Exception { new Main().run(); }
}

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

  1. [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀

    题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...

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

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

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

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

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

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

  5. 激光导弹Gundam Unicorn(二维前缀和and二维差分)

    激光炸弹和Gundam Unicorn是二维前缀和和二位差分的综合应用. 首先是一二维差分,前缀和的模板前缀和与差分 图文并茂 超级详细整理(全网最通俗易懂)_林深不见鹿 的博客-CSDN博客_前缀和 ...

  6. P2280-激光炸弹【二维前缀和】

    正题 评测链接:https://www.luogu.org/record/show?rid=9634929 大意 有nnn个东西,在5001∗5001" role="present ...

  7. BZOJ 1218(二维前缀和)

    传送门: 题面: 1218: [HNOI2003]激光炸弹 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4197  Solved: 1788 [S ...

  8. 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】

    任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...

  9. 一维前缀和,二维前缀和,一维差分,二维差分(翻译)

    练习一道题目 输入一个长度为n的整数序列. 接下来再输入m个询问,每个询问输入一对l, r. 对于每个询问,输出原序列中从第l个数到第r个数的和. 输入格式 第一行包含两个整数n和m. 第二行包含n个 ...

最新文章

  1. 前辈说先学会了这些Python知识点,再谈学习人工智能、机器学习
  2. Linux 多个cpp文件的编译(Makefile)
  3. java数据结构编程_Java数据结构编程
  4. 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!
  5. Restful API 中的错误处理方案
  6. 127.0.0.1和0.0.0.0地址的区别 | 文末送书
  7. 一台机器上安装两个tomcat
  8. java base server 状态_SQL Server:数据库陷入“恢复”状态 - SQL Server: Database stuck in “Restoring” state...
  9. mysql中将多行数据合并成一行数据
  10. 猜数字游戏编程C语言0到9,【游戏编程】猜数字游戏(C语言)
  11. 笔记本电脑上没有计算机软件,笔记本电脑无需安装软件,无需联网,也可无线投影在投影仪上显示...
  12. sketch软件_产品经理基础知识构成之图像处理工具sketch(1)
  13. mysql调查问卷_mysql – 解密数据库ER图用于问卷调查
  14. python爬虫编码彻底解决
  15. PHP基础教程(一)PHP快速入门
  16. Oracle特殊符号
  17. 10分钟教你生成超高逼格微信朋友圈
  18. LabVIEW开发FPGA参考框架
  19. CANoe操作介绍系列 ———— Analysi功能区中Graphic的介绍与使用
  20. codeforces 332B B. Maximum Absurdity(rmq)

热门文章

  1. Android——Android Studio导入SlidingMenu类库的方法
  2. Mysql讲解数据库并发控制知识
  3. 自己实现java I/O中的BufferedReader对象中的raedLine方法
  4. ASP.NET Cache缓存管理基于web的缓存
  5. Android中使用Intent进行窗体切换,并且传值和自定义类的对象详解
  6. OGC 开放地理信息系统协会
  7. 在VC6中使用ADO读取Oracle中的BLOB字段
  8. java生成数据库设计说明书(excel)
  9. 软件设计师09-面向对象-图集
  10. 我38岁,从外企技术高管到失业在家,只因为做错了这件事