bzoj#2958. 序列染色
-
非常好的容斥 dp 题
-
发现这道题分为没有找到颜色
,找到连续 个颜色 但没找到颜色 以及都找到了三种状态,因此我们考虑把这些状态记为 设到 dp 中-
设计状态:设
表示前 个数,状态为 ,第 个数为 的方案数( ) -
转移:首先我们容易想到枚举第
个数填什么,即但这显然不对,因为这时候可能出现状态之间的跨越,例如在填第
中状态时恰好填了连续 个 ,从而转移到状态 。怎么办?我们考虑使用容斥。对于
,我们先枚举第 位填什么,然后考虑使用容斥减掉出现了连续个颜色 的部分,容易发现即为 。对于其他状态同理,最终得到递推式:其中要注意的是对于第
的式子当且仅当 中所有数都为 时才满足条件, 式子同理,可以使用前缀和来判断区间中是否有某个颜色 -
最终答案:
-
-
最终复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?