
Codeforces Round #401 (Div. 2) E. Hanoi Factory(单调栈+思维)
读取n个物品的数据。 将物品按照bi从大到小排序。 初始化一个栈来维护物品的堆叠顺序。 遍历每个物品,处理栈中的物品,弹出不符合条件的物品,并更新当前总和和最大高度。 将当前物品压入栈,更新当前总和和最大高度。 最后输出最大高度。
发布日期:2021-05-08 15:18:24
浏览次数:26
分类:精选文章
本文共 671 字,大约阅读时间需要 2 分钟。
今天遇到了一个有趣的问题,需要找出n个物品叠起来的最大高度。每个物品都有三个属性ai、bi、hi(高度),当i和j满足aj < bi ≤ bj时,i物品可以放到j物品上面。求叠起来的最大高度。
这个问题看起来有点复杂,但实际上是一个傻逼题。我们可以通过贪心算法和栈的数据结构来解决它。一开始我想复杂了,后来发现其实并不难。
首先,我们将物品按照bi从大到小排序。当处理一个物品i时,如果它的bi比栈顶物品j的aj小,那么它就不能放在j物品上面。这时候,我们需要将栈顶的物品弹出栈,直到找到一个满足aj < bi的物品j。弹出物品j时,我们需要计算弹出的j物品的hi,并将其从当前总和中减去,同时更新最大高度。
当处理完弹出物品后,如果栈顶的物品aj < bi,那么我们可以将物品i放到栈顶的物品j上面。此时,我们需要将物品i的hi加到当前总和中,并更新最大高度。
通过这种方法,我们可以保证每次叠加的物品都是最优的,从而得到叠起来的最大高度。
以下是具体实现步骤:
在实现过程中,我们需要注意以下几点:
- 使用长长型变量来存储高度,避免溢出。
- 在弹出物品时,需要及时更新当前总和,并记录最大高度。
- 栈的操作需要高效处理,确保时间复杂度为O(n)。
通过上述步骤,我们可以高效地解决这个问题,得到叠起来的最大高度。
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月22日 06时46分19秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Requests实践详解
2019-03-06
接口测试简介
2019-03-06
Golang Web入门(4):如何设计API
2019-03-06
让sublime实现js控制台(前提是安装了nodejs)
2019-03-06
树莓派连接二手液晶屏小记
2019-03-06
error: 'LOG_TAG' macro redefined
2019-03-06
android10Binder(一)servicemanager启动流程
2019-03-06
ES6基础之——new Set
2019-03-06
nodeJS实现识别验证码(tesseract-ocr+GraphicsMagick)
2019-03-06
玩玩小爬虫——试搭小架构
2019-03-06
AS与.net的交互——加载web上的xml
2019-03-06
Javascript之旅——第八站:说说instanceof踩了一个坑
2019-03-06
Javascript之旅——第九站:吐槽function
2019-03-06
Javascript之旅——第十一站:原型也不好理解?
2019-03-06
Sql Server之旅——第十站 看看DML操作对索引的影响
2019-03-06
十五天精通WCF——第二天 告别烦恼的config配置
2019-03-06
双十一来了,别让你的mongodb宕机了
2019-03-06
asp.net mvc 之旅 —— 第六站 ActionFilter的应用及源码分析
2019-03-06
Tomcat 热部署
2019-03-06
深入解析 HTTP 缓存控制
2019-03-06