跟认识的一些大神做了讨论,如果不考虑5%的群伤,解题思路可以是这样的:
比较相邻两个敌人不同顺序对卢克造成的攻击大小,然后做个冒泡排序,就可以得出最终的排序。
假设:
卢克的攻击为A,敌人攻击、血量为(a1,h1)、(a2,h2)、...
ceil()为向上取整函数,卢克杀死敌人1的回合数为ceil(h1/A),同理杀死敌人2的回合数为ceil(h2/A)...
为了易于表述,姑且将ceil(h1/A)直接用h1/A表示。
第一种排序:[(a1,h1),(a2,h2)]
卢克受到的伤害值为:[(a1+a2)*(h1/A)] + [a2*(h2/A)]
解释:第一个中括号是第一个敌人存活期间,一共对卢克造成的总伤害;第二个中括号,是第二个敌人对卢克造成的伤害;
第二种排序:[(a2,h2),(a1,h1)]
卢克受到的伤害值为:[(a2+a1)*(h2/A)] + [a1*(h1/A)]
两者一比较,相同项去掉,第一种排序剩余:a2*(h1/A),第二种排序剩余:a1*(h2/A)
这两个值,谁大就说明伤害多。以这种方式冒泡,就可以得出排序。
-------------------
不过,加上了5%的群伤...就太复杂了,目前能想到的方式,就是暴力破解,把每种排序组合都计算一遍,然后排序...
比较相邻两个敌人不同顺序对卢克造成的攻击大小,然后做个冒泡排序,就可以得出最终的排序。
假设:
卢克的攻击为A,敌人攻击、血量为(a1,h1)、(a2,h2)、...
ceil()为向上取整函数,卢克杀死敌人1的回合数为ceil(h1/A),同理杀死敌人2的回合数为ceil(h2/A)...
为了易于表述,姑且将ceil(h1/A)直接用h1/A表示。
第一种排序:[(a1,h1),(a2,h2)]
卢克受到的伤害值为:[(a1+a2)*(h1/A)] + [a2*(h2/A)]
解释:第一个中括号是第一个敌人存活期间,一共对卢克造成的总伤害;第二个中括号,是第二个敌人对卢克造成的伤害;
第二种排序:[(a2,h2),(a1,h1)]
卢克受到的伤害值为:[(a2+a1)*(h2/A)] + [a1*(h1/A)]
两者一比较,相同项去掉,第一种排序剩余:a2*(h1/A),第二种排序剩余:a1*(h2/A)
这两个值,谁大就说明伤害多。以这种方式冒泡,就可以得出排序。
-------------------
不过,加上了5%的群伤...就太复杂了,目前能想到的方式,就是暴力破解,把每种排序组合都计算一遍,然后排序...