UVA 10559 Blocks 方块消除

该博客探讨了一种动态规划策略,用于解决游戏中消除方块以获得最大得分的问题。通过分析序列中颜色相同的方块段,提出了扩展状态表示来处理额外的拼接情况,并详细描述了两种决策过程,包括直接消除和拼接消除。算法的时间复杂度为O(n^4),但在实际应用中,由于记忆化搜索和状态限制,效率较高。

在这里插入图片描述
【分析】
为了叙述方便,设左数第i个方块的颜色为A[i]。按照线性结构动态规划的常见思路,设d(i,j)表示子序列i~j的最大得分,但是似乎无法用d(i,k)和d(k,j)来计算d(i,j),因为可能i~k和k~j各剩下一些,拼起来以后消除。如XAXBXCXDXEX,实际上是把A和E全部单个消除以后再消除X的。怎么办呢?

在最优矩阵链乘中,枚举的是“最后一次乘法”的位置。本题是不是也可以枚举“最后一个方块什么时候消掉”呢?这个问题的答案有两种可能:直接把它所在的一段消掉;把它和左边的某段拼起来以后一起消。第一种情况容易处理,但第二种情况就没那么简单了。
具体来说,设与j同色的方块可以向左延伸到p(即A[p]=A[p+1]=…=A[j]),
且A[q]=A[j],A[q]不等于A[q+1],则上述第二种情况就是指先把q+1~p-1这一段消掉,把p~j这一段和以q为右端点的那一段拼起来,如图9-23所示。注意i~j全部同色时找不到这样的q,但此时可以直接计算出结果。下面忽略这种情况。
在这里插入图片描述
不过,把这两段拼起来以后仍然不一定立刻消除,还可能要和更左边的另一段拼起来……是不是很复杂?但有一点是可以肯定的,那就是q+1~p-1这一段肯定可以先消掉(拖到后面再消也得不到什么好处)。那么现在就把它消掉(得分是d(q+1,p-1)),得到一个“子序列i~q的右边再拼上j-p+1个与A[q]同色的方块”的奇怪状态,如图9-24所示。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值