AcWing 99. 激光炸弹 (二维前缀和)
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. 激光炸弹 (二维前缀和)相关推荐
- [日常摸鱼]bzoj1218[HNOI2003]激光炸弹-二维前缀
题意:二维网格一些格子有权值,求用边长为$r$的正方形能覆盖到格子权值和的最大值,格子大小$ \leq 5000$ 非常裸的二维前缀,然而 题目下标从0开始! QAQ 要是比赛就要爆零啦- #incl ...
- [HNOI2003]激光炸弹(二维前缀和+大坑点)
地图上有 N 个目标,用整数 Xi,Yi表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R个位置的正方形内的所有目 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 99. 激光炸弹:二维前缀和
文章目录 题目解答 题目来源 题目解答 来源:acwing 分析: 前缀和习惯从下标1开始. 注意:本题是不包含边界的.什么意思? 以样例为例,这里有两个点,分别在(0,0) 和(1,1),且攻击的矩 ...
- 暑假每日算法学习打卡(十)----[HNOI2003]激光炸弹,「土」秘法地震(二维前缀和),Captcha Cracker【牛客】
[HNOI2003]激光炸弹 题目描述 一种新型的激光炸弹,可以摧毁一个边长为R的正方形内的所有的目标. 现在地图上有n(N ≤ 10000)个目标,用整数Xi,Yi(其值在[0,5000])表示目 ...
- 激光导弹Gundam Unicorn(二维前缀和and二维差分)
激光炸弹和Gundam Unicorn是二维前缀和和二位差分的综合应用. 首先是一二维差分,前缀和的模板前缀和与差分 图文并茂 超级详细整理(全网最通俗易懂)_林深不见鹿 的博客-CSDN博客_前缀和 ...
- P2280-激光炸弹【二维前缀和】
正题 评测链接:https://www.luogu.org/record/show?rid=9634929 大意 有nnn个东西,在5001∗5001" role="present ...
- BZOJ 1218(二维前缀和)
传送门: 题面: 1218: [HNOI2003]激光炸弹 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4197 Solved: 1788 [S ...
- 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 ...
- 一维前缀和,二维前缀和,一维差分,二维差分(翻译)
练习一道题目 输入一个长度为n的整数序列. 接下来再输入m个询问,每个询问输入一对l, r. 对于每个询问,输出原序列中从第l个数到第r个数的和. 输入格式 第一行包含两个整数n和m. 第二行包含n个 ...
最新文章
- 前辈说先学会了这些Python知识点,再谈学习人工智能、机器学习
- Linux 多个cpp文件的编译(Makefile)
- java数据结构编程_Java数据结构编程
- 实用脚本!利用 Python 对 PDF 进行加密、解密操作,代码拿走就用!
- Restful API 中的错误处理方案
- 127.0.0.1和0.0.0.0地址的区别 | 文末送书
- 一台机器上安装两个tomcat
- java base server 状态_SQL Server:数据库陷入“恢复”状态 - SQL Server: Database stuck in “Restoring” state...
- mysql中将多行数据合并成一行数据
- 猜数字游戏编程C语言0到9,【游戏编程】猜数字游戏(C语言)
- 笔记本电脑上没有计算机软件,笔记本电脑无需安装软件,无需联网,也可无线投影在投影仪上显示...
- sketch软件_产品经理基础知识构成之图像处理工具sketch(1)
- mysql调查问卷_mysql – 解密数据库ER图用于问卷调查
- python爬虫编码彻底解决
- PHP基础教程(一)PHP快速入门
- Oracle特殊符号
- 10分钟教你生成超高逼格微信朋友圈
- LabVIEW开发FPGA参考框架
- CANoe操作介绍系列 ———— Analysi功能区中Graphic的介绍与使用
- codeforces 332B B. Maximum Absurdity(rmq)