CF1132F Clear the String

Description

给你一个串 \(s\),每次可以花费 \(1\) 的代价删去一个子串,要求子串的每一位为同一个字符。

求删去整个串的最小代价。 \(1\leq|s|\leq 500\)

Solution

居然不会了!

发现状态的转移不止与当前区间的端点有关,而且和中间颜色相同的也有关。所以必须枚举中间节点进行转移。

考虑 \(dp[l][r]\) 表示删完 \([l,r]\) 的最小代价。有转移

\[dp[l][r]=min(dp[l][k]+dp[k+1][r-1]+[s_k\neq s_r]) \]

这样实际上就是同时考虑了中间相同颜色的一起删和分开删的情况。

posted @ 2021-09-06 22:03  Kreap  阅读(21)  评论(0编辑  收藏  举报