小西同学最近喜欢上了 iOS 游戏《三重镇 Triple Town》。游戏之余,小西也在思考如何才能在这个游戏中获得更高的分数。 如图 1 所示,游戏在一个 n∗m 的地图中进行。游戏给定一个建造序列,玩家按照此建造序列依次选择空白位置建造相应的建筑单位。建筑有九个不同的等级,由低到高分别为 Grass, Bush, Tree, Hut, …等(为了方便描述,我们称之为 L1,L2,L3,…,L9)。

图1
当玩家在一个空白位置建造单位之后,有可能引起反应。反应的构成条件是:从这个格子出发,与该建筑单位等级相同的格子所构成的连通块大小大于等于3, 则这个连通块将被合并为一个下一等级的建筑,此建筑的位置为最后建造的建筑单位位置,连通块中其他位置将变回空格。这里的连通块是指直接或者间接相邻的位置集合。另外需要注意的是,L9为建筑的最高等级,所以多个 L9 的连通块并不会合并。例如在图 2 中,当建造了中间的 L1 之后,与该位置相连的 L1就被合并成了一个 L2。

图2
注意,在合并的过程中,可能会引起连环反应。如下图所示。

图3
游戏的得分取决于玩家建造和反应生成的单位,建造或者反应生成建筑单位就可以获得相应的分数。不同等级建筑的得分表如下:
| 建筑 |
L1 |
L2 |
L3 |
L4 |
L5 |
L6 |
L7 |
L8 |
L9 |
| 得分 |
4 |
20 |
100 |
500 |
1,500 |
5000 |
20000 |
100000 |
500000 |
以刚才的两个游戏过程为例。图 2 中,首先建造了 L1, 将得到 4 分,随后, L1 进行了反应生成了 L2, 此时再得到 20 分。总共得分为 24。而在图 3 中,这一 步操作得分为 4+20+100+500=624 分。 为了降低游戏的难度,游戏中还设有两种道具,分别为星星和炸弹。在游戏开始时,玩家被给定 p 个星星道具和 q 个炸弹道具,玩家可以在任意时刻使用。两者功能如下:
| 名称 |
用途 |
| “星星”道具 |
可以放置在一个空格位置。当星星被放置时,星星会自动变为能引起反应的最高等级建筑。当在该位置不能引起任何反应时,星星变为 L1。 例如,在图 3 正中间位置放置星星,星星自动变为 L3。星星的得分按照变化后的建筑计算得分。 |
| “炸弹”道具 |
炸弹道具可以放在在一个有建筑的位置上,作用为炸掉这个建筑并将该位置恢复为空格。当使用炸弹时,得分将扣除被炸掉的建筑的一半分数 (即,得分为负数)。 |
在游戏的进行过程中,玩家必须按照给定的顺序进行建造,但可以随时穿插使用两种道具。游戏的目标是,通过合理的操作,取得最高的分数。