|
本帖最后由 这只话唠菜鹰是路人 于 2016-11-22 00:43 编辑
这篇文章是在上一篇(https://www.hawkaoe.net/bbs/thread-115376-1-1.html)的基础上做出的更加深入了一点的研究。其实结论在前篇不久后就出来了,但一直忘了公布= =,直到今天菜鹰问我:“拉海尔能打多少个普通近战单位”我才想起还有这个巨坑……那么我就来回答一下这个问题吧。
---------------------------------------------------------------------------------------------------------------------------------------
(此前希望大家阅读下前篇,因为这里会沿用很多概念)
我们在前篇提出了威力值的概念,即单位攻击和血量的乘积,表示为 W = aX
但是当时并没有考虑攻速和护甲的影响,所以先来考虑一下
设单位A的攻击力为a,血量为X,护甲为n,攻速为u;单位B的攻击力为b,血量为Y,护甲为m,攻速为v,那么
单位时间内A对B造成的伤害为 u(a-m),我们不妨把它称为A对B的“攻效“,用A表示,即 A = u(a-m)
同理,B对A的攻效 B = v(b-n)
我们可以发现,这里的A和B,恰恰就是前篇所使用的“攻击力”的概念。所以我们可以直接得出修正后的威力值公式(大家可依照前篇自行推导):
一个近战单位的威力值 W = AX
其中,X为该单位血量,A为该单位对目标的攻效。
----------------------------------------------------------------------------------------------------------------------------------
好,前戏做足,我们可以开始进入正题了。
拉海尔能打几个?
首先我们来想像一下这样一个场景:
拉海尔被一群近战单位围殴,没有高地,没有克制,没有卡位,经过一场天昏地暗的血战,敌人全军覆没,拉海尔获胜。
我们先来回答一个问题:在这场战斗中,敌人对拉海尔造成的总伤害量是多少?
也许大家很快就想到了。没错,这与拉海尔选择的击杀顺序有关。
那么我们就可以来设了:
设敌人有n个,编号分别为1,2,……,n;他们对拉海尔的攻效分别是B1,B2,……,Bn;血量分别是Y1,Y2,……,Yn;威力值分别为W1,W2,……,Wn
而拉海尔对他们的攻效分别是A1,A2,……,An;血量为X
拉海尔选择的击杀顺序依次为:1,2,……,n
那么,这场战斗可以分为n个阶段:
第1阶段:从开始到 1 号敌人死亡,持续时间 T1 = Y1/A1 (应该好理解吧),则敌人造成的伤害为:
H1 = (B1 + B2 +……+ Bn)T1 = (B1 + B2 +……+ Bn)Y1/A1
第2阶段:从 1 号敌人死亡到 2 号敌人死亡,持续时间 T2 = Y2/A2,则敌人造成的伤害为:
H2 = (B2 + B3 +……+ Bn)Y2/A2
以此类推……
第n阶段:从 n-1 号敌人死亡到结束,持续时间 Tn = Yn/An,则敌人造成的伤害为:
Hn = BnYn/An
所以,敌人造成的伤害总量为:
H = H1 + H2 +……+ Hn ①
(观众)算了这么半天,那么它tmd到底是多少!?.gif)
别急,我们先来看个图:
--------------------------------------------------------------------------------------------------------------------------------------
如下:
理解这个“矩形堆”需要一点抽象思维能力。首先要知道的事,虽然我只画出了5行5列,但实际上它是n行n列:每一行的高度从上到下分别为B1,B2,……,Bn;每一列的宽度分别为Y1/A1,Y2/A2,……,Yn/An
好了,发现了吗?
发现了是吧:图形的每一列的面积,分别代表了 H 的表达式(①式)这个多项式中的每一项,也就是说,伤害总量 H 就是这个图形的面积。
好了,我们回归正题。
拉海尔能打几个?
拉海尔要想尽量打得多,那么他就需要选择一个最佳的击杀顺序(更贴切的说法是把敌人们根据属性“安排”到上述的击杀顺序中),使得 H 最小,也就是使这个图形的面积最小。
这就成了一个求最小值的问题
-----------------------------------------------------------------------------------------------------------------------------------
那么我们就来求一下。
首先,我们注意到:
边缘的那些蓝色小矩形,它们的面积分别是(从左上到右下):B1Y1/A1,B2Y2/A2,……,BnYn/An
也就是(如果你还记得威力值的定义的话):W1/A1,W2/A2,……,Wn/An
这些矩形的面积恰好代表了每一个敌人的属性,它们是不会受到击杀顺序影响的。而它们从左上到右下的排列顺序,代表了击杀顺序。
于是问题就变成了,如何用给定的蓝色矩形“围成”面积最小的矩形堆。
由于蓝色矩形的面积均为定值,不难发现,求矩形堆的最小面积,等同于:
求红色部分的最小面积。
不难发现:
当折线MN是“凹陷”的情况下,所取得的红色区域面积最小。(可用反正法证明,有兴趣的同学可自行尝试。)
也就是:
θ1 ≤ θ2 ≤……≤ θn
即
tan θ1 ≤ tan θ2 ≤……≤ tan θn
即
A1B1/Y1 ≥ A2B2/Y2 ≥……≥ AnBn/Yn
令AnBn/Yn = Fn,则我们可以得出结论:
当且仅当 F1 ≥ F2 ≥……≥ Fn 的情况下,矩形堆的面积最小,H取得最小值,敌军对拉海尔造成的伤害最低。
我们不妨把这个 F 称为威胁值,则 F = AB/Y
所以我们可以得到威胁值的定义:
在近战单位间一对多的围攻关系中,围攻方的每个单位对被围攻方都存在一个威胁值,其表达式为:
其中,A为被围攻方对该单位的攻效,B为该单位对被围攻方的攻效,Y为该单位血量。
对被围攻方来说,威胁值越大,越应该优先击杀。按威胁值从大到小的顺序击杀,即为被围攻方的最佳击杀顺序,此时围攻方对被围攻方造成的总伤害量最少。
为了更好地理解这一个理论,大家可以去玩一玩下面这个战役:
https://www.hawkaoe.net/bbs/thread-115408-1-1.html
祝愉快~
-------------------------------------------------------------------------------------------------------------------------------------
(观众)完了?
完了
(观众)那拉海尔究竟能打几个?
我怎么知道,我只是用这个问题引入威胁值的。
(观众)@#¥%……&*
.gif)
哦,最后,感谢不说话知识妹子 @阳明白鹤 提供“矩形堆”模型。(虽然后面的推导还是本少做的啦~~ )
|
评分
-
查看全部评分
|