方块消除思路简记
前言:
本题思路真的十分抽象,感觉需要透彻的理解一下,以防忘记,记录一下。
本题是区间dp
基本思路如下:
dp数组需要三维 \(dp{_i}{_,}{_j}{_,}{_p}\),对于每一个维度:
\(i\) 至 \(j\) 表示一个区间,\(p\)表示在\(j\)后面有几个与\(j\)相同颜色的方块。
对于每一群方块(若干个相同颜色的方块),我们考虑将这一群往后与\(p\)个相同颜色的方块合并。可得如下状态转移方程:
\(dp{_i}{_,}{_j}{_,}{_p}=Max(dp{_i}{_,}{_j}{_,}{_p},dp{_i}{_,}{_j{_-}{_1}}{_,}{_0}+(n_j+p)^2)\)
若我们将其与 \(i\) 至 \(j-1\) 区间内的相同颜色的一群方块合并(令这群方块位置为\(k\)),可得如下状态转移方程:
\(dp{_i}{_,}{_j}{_,}{_p}=Max(dp{_i}{_,}{_j}{_,}{_p},dp{_i}{_,}{_k}{_,}{_n{_{_j}}{_+}{_p}}+dp{_k{_+{_1}}}{_,}{_j{_-{_1}}}{_,}{_0})\)
作者写题时困惑如下:
因为 \(p\) 是对于每一个 \(j\) 后有的方块个数。故此我当时认为上述向后合并(也就是第一个)的状态转移方程有一个错误,就是 \(dp{_i}{_,}{_j{_-}{_1}}{_,}{_0}\) 中为什么可以令 \(p\) 等于 \(0\) 而不是\(j\)后有相同颜色的方块的总数\(sum\)减去所取走的\(p\),即\(sum_j-p\)
经过一天的冥思苦想,作者终于意识到了 \(dp{_i}{_,}{_j}{_,}{_0}\) 表示为将 \(i\) 到 \(j\) 区间内所有方块取走所得的最大收益,扩展到 \(dp{_i}{_,}{_j}{_,}{_p}\) 可以表示为将 \(i\) 到 \(j\) 区间内所有方块取走并在\(j\)后再取\(p\)个所得的最大收益。(我好像是个大唐诗,这似乎应该是推状态转移方程前该意识到的。)
那么本题就做完了。
总结,本题应有两个难点:
-
通过假设未来状态消除后效性(
感觉这个似乎挺好理解的) -
dp数组的意义(
感觉这个纯粹是作者犯唐)