欢迎光临散文网 会员登陆 & 注册

[Codeforces is All You Need] ER 137 E (1743E) - Solution

2022-10-19 12:13 作者:故寓诸无竟  | 我要投稿

问题简述

        有两门激光炮,充能时间分别为t_0%2Ct_1,伤害分别为p_0%2Cp_1。敌人有s大小的护盾,生命值为h。两门激光炮在充能完毕后,可在任意时间单独发射,也可以一同发射(可能需要等待另一门充能完毕)。激光炮u单独发射造成的伤害为p_u-s,两门一起发射造成的伤害为p_0%2Bp_1-s。求击败敌人(生命值不高于0)所需的最小时间。

        题目链接:https://codeforces.com/contest/1743/problem/E

思路

        注意到每次两门激光炮同时发射后,充能时间归零,相当于回到了最初的时候,具有相当显然的子问题性质,因此不妨设f_i表示击败生命值为i的敌人所需的最小时间。下面讨论最核心的转移方程(会有一些其它细节,本题解不做考虑)。

        不难发现,在每次齐射到下一次齐射的时间T中,一定有一门激光炮没有任何等待,因此可以枚举该门激光炮u发射的次数j,由此决定T%3Dj%5Ctimes%20t_%7Bu%7D。在这一时间内,另一门激光炮!u一定会没有等待地发射%5Cleft%5Clfloor%20%5Cfrac%7BT%7D%7Bt_%7B!u%7D%7D%20%5Cright%5Crfloor%20-1次。由此,总共的伤害值:

%5Cdelta(j%2Cu)%20%3D%20%5Cleft(%20%5Cleft%5Clfloor%20%5Cfrac%7BT%7D%7Bt_%7B!u%7D%7D%20%5Cright%5Crfloor-1%20%5Cright)%5Cleft(p_%7B!u%7D-s%5Cright)%20%2B%20j%5Ccdot%20(p_u%20-s)%20%2B%20p_%7B!u%7D

        因此有:

f_i%20%3D%20%5Cmin_%7Bu%5Cin%5C%7B0%2C1%5C%7D%2C%20j%7D%20j%5Ccdot%20t_u%20%2B%20f_%7Bi-%5Cdelta(j%2Cu)%7D

        j最多不会超过h,因此总的复杂度是O(h%5E2)的,足够通过本题。以上略去了很多细节,但核心是正确的,通过截图如下:

1743E 通过截图

后记

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

[Codeforces is All You Need] ER 137 E (1743E) - Solution的评论 (共 条)

分享到微博请遵守国家法律