题意
有两艘飞船,第 i 艘飞船(i∈[1,2])的攻击力为 pi,每一次攻击的充能时间为 ti,一开始两艘飞船没有充能。
现在要打败敌方飞船,敌方飞船的血量为 h,防御力为 s。对于一次攻击力为 P 的攻击,敌方飞船的血量会减少 (P−s)。每一次攻击可以是一艘飞船单独攻击,也可以是两艘飞船同时攻击(当一艘飞船完成充能后,可以等待另一艘飞船充能,然后再一起攻击)。两艘飞船一起攻击的攻击力为 p1+p2。
打败敌方飞船的条件是使得敌方飞船的血量小于等于 0。现在依次给出 p1,t1,p2,t2,h,s ,求出最少需要多少时间能够打败敌方飞船。
思路
考虑到任意时刻若两激光同时发射,则递归变为 h 更小的子问题。因此,设 fi 表示初始两激光均没有充能时,打出 i 伤害的最少时间。
假设在同时发射前两激光均有空闲时间,则同时减小空闲时间可得伤害相同且时间更少的方案。因此,在同时发射激光前,至少一个激光没有空闲时间。
直接枚举其发射次数即可得到 O(h2) 解法,因为每个激光的发射次数显然不会超过 h。设时间为 t=kt1 或 t=kt2,ci=⌊t/ti⌋,则当 c1,c2>0 时才会同时发射。因此伤害为 c1p1+c2p2−(c1+c2−[c1,c2>0])s。
748

被折叠的 条评论
为什么被折叠?



