Circle of Monsters(贪心)

本文探讨了一种算法,旨在解决n个怪物围成一圈,每个怪物有自己的血量和爆炸伤害的情况下,如何找到杀死所有怪物所需的最小子弹数。通过分析最坏情况和爆炸伤害的最优利用,得出了一个O(n)的算法解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

n个怪物围成一圈,每个怪物有自己的血量和爆炸伤害。 怪物在死后会对下一个怪物造成爆炸伤害,又死了又可以爆炸...... 你每发子弹可以对怪物造成1点伤害,求杀死所有怪物的最小子弹数。

传送门

− − − − − − − − − − − − − − − − − − − − − 华 丽 分 割 线 w ( ゚ Д ゚ ) w − − − − − − − − − − − − − − − − − − − − − − − − \color{Red}{---------------------华丽分割线w(゚Д゚)w------------------------} 线w(Д)w

其 实 嘛 , 看 到 题 目 束 手 无 策 , 但 是 看 到 数 据 范 围 会 发 现 是 个 O ( n ) 算 法 , 那 我 们 要 开 始 找 规 律 了 。 其实嘛,看到题目束手无策,但是看到数据范围会发现是个O(n)算法,那我们要开始找规律了。 O(n)

首 先 还 是 想 最 坏 情 况 , 每 个 怪 物 都 用 子 弹 打 , 答 案 是 所 有 怪 物 的 血 量 和 。 首先还是想最坏情况,每个怪物都用子弹打,答案是所有怪物的血量和。

那么我们得出一个很沙雕但很重要的结论:尽可能利用爆炸伤害

爆 炸 伤 害 在 最 优 时 是 每 个 怪 物 都 炸 下 一 个 怪 物 , 这 样 爆 炸 伤 害 和 就 是 爆炸伤害在最优时是每个怪物都炸下一个怪物,这样爆炸伤害和就是

∑ i = 1 n − 1 m i n ( 本 怪 物 爆 炸 伤 害 , 下 一 个 怪 物 血 量 ) + m i n ( 最 后 一 个 怪 物 爆 炸 伤 害 , 第 一 怪 物 血 量 ) \sum_{i=1}^{n-1}{min(本怪物爆炸伤害,下一个怪物血量)}+min(最后一个怪物爆炸伤害,第一怪物血量) i=1n1min()+min()

但是这个伤害是打不出来的,因为我们需要一个起始点 。

很明显我们取一个爆炸伤害对自己炸的血量最少的怪物为起点,这样其余所有爆炸伤害都可以打出来。

答 案 是 s u m ( 怪 物 血 量 和 ) − s u m ( 爆 炸 伤 害 ) + ( 爆 炸 贡 献 最 小 的 一 次 爆 炸 伤 害 ) 答案是sum(怪物血量和)-sum(爆炸伤害)+(爆炸贡献最小的一次爆炸伤害) sum()sum()+()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值