序号 | 标题 | 作者 | 发表时间 | 费用 | 订购数 | 操作 |
---|
在Starcraft某个古怪的薇操地图中,你被要求在一个狭窄的高地上用1个marine来打败2只zergling。由于你认为这是不可能完成的任务,你打算编程验证这一点。
为了方便处理,你抽象出了这样一个模型:
作为战场的狭窄高低可以认为是一个5*5的方格阵,每个方格可能是“可通过”和“不可通过”两种情况。marine和zergling总是占据其中的一个可通过方格。两个zergling可以处于同一方格,但任意时刻,marine不能任一未死亡的zergling处于同一方格。marine和zergling均拥有生命值(HP),marine的初始生命值为m,所有zerglint的初始生命值均为z。
游戏可以抽象为回合制,在每个回合中,marine首先行动。marine可以选择沿竖直或水平方向移动一格,或站在原地朝某只zergling开枪(由于高低非常狭窄,marine可以集中处于高地任何位置的zergling)。marine的每一枪会减少目标zergling得生命值1点,当一只zergling得生命值降低到0点或以下时会死亡。
marine行动完毕后,所有尚未死亡的zergling会同时行动,如果某只zergling和marine相邻,它会攻击marine,否则它会沿着自己当前位置到marine当前位置的最短路前进一格,如果有多条最短路,zergling会按左、上、右、下的顺序一次尝试行动(例如如果左、上都是最短路,zergling会向左走)如果两只zergling同时在同一格攻击marine,marine的生命值只会减少1点,否则每只zergling的攻击都会使marine的生命值减少1点。
当某个回合结束时,若zergling全部死亡则认为游戏胜利,若marine的低到0点或以下,或者游戏进行了34个回合但仍未胜利则认为游戏失败。
你需要判定游戏是否可能取得胜利,如果可能,输出取得胜利的最少回合数。