DP套DP
有些时候,对于某一个数列(或者串等其他东西),我们可以使用DP判断其是否合法。
于是有毒瘤人们就会想到一种题目,对于这种需要用DP来判断是否合法的东西,能不能对其进行计数呢?
对于有些是可以的。
我们考虑一下:因为DP本来就是一个有限状态自动机,也就意味着转移和状态数都是固定的,如果我们把状态通过编号或者状压压到一维,我们就可以处理了。而方案数统计本来就是一个DP,所以这种神奇的方法就叫做DP套DP。
DP套DP大概就这么多,还是要上题:
[TJOI2018]游园会
给定长度 N
,O
,I
组成的串 N
,O
,I
组成的串与 NOI
的串的个数。
输出对于
我们考虑如何检验一个串 NOI
。
对于前者,我们的朴素想法是维护
对于后者,我们会选择跑KMP,但由于匹配串NOI
长为3且字母互不相同,其实就是N
,O
,I
这三个字符之间的转移,有些可行有些不可行。
后者很容易被压在
我们再来看一下前者的转移,
通过数学归纳或者感性理解,我们会发现:
我们只需要处理出来 N
,O
,I
的转移即可。
我们外层的DP就是 NOI
匹配到了第
总体复杂度
CF979E Kuro and Topological Parity
还没有写捏
[ZJOI2019]麻将
upd on 2024.02.28
没想到会有时间补这个,很厉害。
对于我们手上拿到的牌,记
记
考虑转移,我们加入了
考虑到胡牌还有可能是七小对,所以我们在单独维护一个有多少个
这样我们可以存储
然后用
那么最终会答案就等于
时间复杂度是
[NOI2022]移除石子
神秘思维题,详见Alex_Wei老师,因为我也是在他的博客里学的。
我们一层一层的来思考:
第一步、考虑如何检验某种石子情况是可行的的。
不难发现选择长度
所以我们就可以考虑维护
我们假设可以延伸的我们选择了
我们考虑两个优化:如果我们同时在第
据Wei老师做写,我们可以枚举验证第二位
第二步、转化恰好
在这种问题里,恰好一定是比至多难做的,所以考虑能不能转换一下。
当
当
对于上述情况的方面,我们会发现只有两种,第一种是
当
同理,我们便得到,当
第三步、考虑得到某种石子情况至少需要加入多少个石子。
我们模仿第一步,维护
假设
如果
第四步、考虑外层DP 时
由于
所以有意义的转移只会有
我们DP套DP的雏形已经出来的,但由于
第五步、保留有用的内层DP。
我们感性理解,发现
所以我们考虑暴力维护一边所有的转移,可以发现有效的转移数是
预处理出来所有转移,DP即可,最终复杂度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现