方块消除思路简记

前言:

本题思路真的十分抽象,感觉需要透彻的理解一下,以防忘记,记录一下。

题目在这里

AC code

本题是区间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\)所得的最大收益。(我好像是个大唐诗,这似乎应该是推状态转移方程前该意识到的。

那么本题就做完了。

总结,本题应有两个难点:

  1. 通过假设未来状态消除后效性(感觉这个似乎挺好理解的

  2. dp数组的意义(感觉这个纯粹是作者犯唐

posted @ 2025-02-08 13:11  Tighnari  阅读(11)  评论(0)    收藏  举报