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()+()