Loading

P4170 [CQOI2007] 涂色

算法

看完题目不好想到思路
逆向思维, 考虑从目标串刷成一个由全部相等的颜色组成的串

由于一刷刷一堆想到区间

状态

\(dp_{l, r}\) 表示区间 \([l, r]\) 的最少涂抹次数

状态转移

分类讨论

  • \(S_l = S_r \text{ 且 } l < r\)
    此时分别去掉两个端点, 观察发现
    设覆盖了 \(l\) 的唯一一次染色的右端点是 \(x\)
    我们把这次染色的右端点改成 \(r\) ,并且把所有在 \([x + 1, r]\) 上进行的染色保持原来的顺序挪到这次染色之后,这样我们在不改变步数的情况下从一个对
    \([l,r−1]\) 染色的方案得到了一个对 \([l,r]\) 染色的方案。故

\[dp_{l,r} = dp_{l, r - 1} \]

  • \(S_l \neq S_r \text{ 且 } l < r\)
    ​显然为区间分割

\[dp_{l, r} = \min^{r - 1}_{i = l}{ (dp_{l, i}, dp_{i + 1, r}) } \]

代码

本题为 ctj

总结

善于利用逆向思维
寻找特殊性质
注意分类的不重不漏
这一类问题是记录 \(l, r\) 进行转移

posted @ 2024-10-04 21:37  Yorg  阅读(17)  评论(0编辑  收藏  举报