[ol]
(比如我开始算错了,以为都是2S- t(x1)的情况,也就是T(x1,x2,x3)的值与x2、x3无关,能否直接另外采用一个
F(x1) = T(x1,x2,x3) = 2S- t(x1)
的描述方式?还是直接写成T(x1)=T(x1,x2,x3)?感觉写起来很怪。我明显没让ai看懂我的问题,给我回了一些不知所云的东西,人类应该能看懂我的意思吧)
[/ol]
ps:欢迎讨论,但是不欢迎直接扔ai回复的灌水。我不确定自己用的提示词有没有问题,反正问了半天是各种错误,让它帮忙列举所有的可能性都会算错,所以直接复制粘贴的还是算了。
描述
在植物大战僵尸的我是僵尸模式中,三线射手(攻击本行和上下邻行)这种可以影响其他行的植物需要优先消灭。那么如何根据每一行三线射手的数量来确定最佳的僵尸放置顺序,使其受到的总攻击次数最小化。
比如前三行分别有1、3、2棵三线,应该优先攻击哪一路?
条件简化
[ol]
[/ol]
计算示例
用t(x)表示第x行的三线数量,也即此行三线会造成的伤害值。T(x1,x2,x3)表示按照第x1行、第x2行、第x3行的顺序依次放置僵尸。
例如计算T(2,1,3):
因此,
T(2,1,3) = (t(1)+t(2)+t(3))+t(1)+t(3)
记S=∑t(i),则
T(2,1,3) = 2S- t(2)
同理计算全部排列组合:
T(2,1,3) = T(2,3,1) = 2S- t(2)
T(1,2,3) = 2S- t(1)
T(3,2,1) = 2S- t(3)
T(1,3,2) = T(3,1,2) = 2S - (t(1)-t(2)+t(3))
下面考虑不同取值的情况:
2S- t(2)
2S- t(1) t(3)
2S - (t(1)-t(2)+t(3)) = 2S - (t(1)-(t(2)-t(3))) > 2S- t(1)
因此T(1,2,3)为最小值,应该先攻打1行
否则T(1,3,2) = T(3,1,2)为最小值,此时先攻打1行仍然为最优解之一
2S- t(3) t(1)
2S - (t(1)-t(2)+t(3)) = 2S - (t(3)-(t(2)-t(1))) > 2S- t(3)
因此T(3,2,1)为最小值,应该先攻打3行
否则T(1,3,2) = T(3,1,2)为最小值,此时先攻打3行仍然为最优解之一
因此可以得出结论,先攻打三线最多的一行总是最优解(之一),实际操作中可以忽略其他少数方案直接选择三线最多的一行
通俗解释
这里我想到一个比较通俗但好像没那么数学的解释。
第i行的植物最多可以攻击三行,也就是在最终的T函数中出现3次t(i),如果先消灭这一行,t(i)只会出现一次。因为t(i)是最大的,所以出现的次数越少越好,因此应该先攻打三线最多的一行。
推广情况
[ol]
[/ol]
算血公式
https://www.bilibili.com/read/cv6096663/
这里是对IZE算血公式的详细说明。简单地说,按照三线相当于三株豌豆射手来看,而豌豆射手在红线内倒数第n列的伤害为
6n-3
即在最右侧放置时能对正常速度的僵尸造成3颗豌豆的伤害,向左一格则伤害为9,以此类推。
此外,对于三线的邻行应该+2伤害,因为正常情况下本行的植物被消灭后会停止输出,而三线的本体并不在本行,所以要比本行的豌豆射手多2伤害
我的问题
感谢你看到这里,我的语言组织能力有限,数学表述也不一定准确,如果看到这里忘记我的问题也正常,请回到本贴开头查看。

