那我觉得今天问题直接贪就可以了?
首先如果不吃药,怪物回合数 T_i = floor(L_i / D),受到的伤害 dH_i = T_i * K_i
吃药情况下,除了把大力理解为增加下一次攻击的方式,另一种理解方法是怪物看到了K018喝大力的姿势非常勇所以张嘴闭眼震惊到无法行动一回合。也就是怪物少出手了一回合。当然多喝几瓶就多白嫖几回合
而我们的目的是让K018不死,换另一个角度考虑可以理解为是找到完成任务所受到的最少伤害
因为整个魔塔没有加攻或者加血什么的复杂机制,都是超勇的直接对日,那么很显然好钢用在刀刃上,如果一个怪打我很疼,那么我就要超勇的喝大力。只要我秒了他,那他就没得出手了。(所以实际上如果一场战斗我注定要喝大力的话,那我不如先喝为敬
所以算法就很显然了(施工中
import numpy as np
T = np.floor(L / D) #各怪回合数
idx = list(np.argsort(K)) #根据怪物攻击力升序排列
for i in reversed(idx): #从最疼的怪开始
dm = min(T[i], m) #大力能喝多少喝多少
m = m - dm #喝掉大力
T[i] = T[i] - dm #白嫖回合
if m == 0: #大力喝光了
break
dH = np.sum(T * K) #统计受到的总伤害
return H > dH