[Codeforces is All You Need] ER 137 E (1743E) - Solution
问题简述
有两门激光炮,充能时间分别为,伤害分别为
。敌人有
大小的护盾,生命值为
。两门激光炮在充能完毕后,可在任意时间单独发射,也可以一同发射(可能需要等待另一门充能完毕)。激光炮
单独发射造成的伤害为
,两门一起发射造成的伤害为
。求击败敌人(生命值不高于
)所需的最小时间。
题目链接:https://codeforces.com/contest/1743/problem/E
思路
注意到每次两门激光炮同时发射后,充能时间归零,相当于回到了最初的时候,具有相当显然的子问题性质,因此不妨设表示击败生命值为
的敌人所需的最小时间。下面讨论最核心的转移方程(会有一些其它细节,本题解不做考虑)。
不难发现,在每次齐射到下一次齐射的时间中,一定有一门激光炮没有任何等待,因此可以枚举该门激光炮
发射的次数
,由此决定
。在这一时间内,另一门激光炮
一定会没有等待地发射
次。由此,总共的伤害值:
因此有:
最多不会超过
,因此总的复杂度是
的,足够通过本题。以上略去了很多细节,但核心是正确的,通过截图如下:

后记
本场的实况录屏见https://www.bilibili.com/video/BV1bG4y1n7oH。临场没能及时反应过来。当时写了一个齐射间固定使用一种策略二分贪心,后来意识到应该要dp,但觉得可能有点麻烦就放弃了——没想到写起来挺容易的。