插头DP
1.算法学习笔记(1):CDQ分治2.算法学习笔记(2):分块3.算法学习笔记(3):莫队算法4.算法学习笔记(4):FHQ平衡树(无旋平衡树)5.算法学习笔记(5):AC自动机6.算法学习笔记(6):优秀trick和性质合集7.算法学习笔记(7):数论8.算法学习笔记(9):第k大问题合集9.算法学习笔记(10):各种序的美好性质10.算法学习笔记(11):历史版本和线段树11.算法学习笔记(12):左偏树12.算法学习笔记(13):同余最短路13.算法学习笔记(14):区间最值操作和历史最值问题14.算法学习笔记(15): Splay树15.算法学习笔记(16):Link Cut Tree16.算法学习笔记(17):Slope trick17.算法学习笔记(18):珂朵莉树18.算法学习笔记(20):网络流19.算法学习笔记(21):数论分块20.算法学习笔记(22):莫比乌斯反演21.算法学习笔记(23):杜教筛22.算法学习笔记(24):筛法23.暑假集训学习笔记(1):lxl DS Day 124.暑假集训学习笔记(2):lxl DS Day 225.暑假集训学习笔记(3):lxl DS Day 326.多项式笔记27.生成函数笔记
28.插头DP
29.DP选讲做题记录 by 付乙淼30.拓展摩尔投票31.图论知识总结插头DP
前言
今天学长讲了插头DP, 以前觉得他的模板就是黑题, 一定非常的难, 但是学习了之后发现它其实挺好理解, 但是难度该黑。
鉴于水品有限, 只简短的说一说, 给自己梳理一下思路。
算法
我们从模板题的弱化版开始讲:
P5074 Eat the Trees
我们发现要是闭合回路, 这只能老老实实状压, 不然没法让它合法, 更别说转移求方案数了, 但是这个线有很复杂, 可能可以压, 但是转移就需要巨复杂的分讨, 我们就不想了。 这时候就有两个巨牛的东西具有很好的性质, 可以很轻松的转移并且状态相对较少。
轮廓线和插头
就是我们维护这一排格子的轮廓线, 如图(from OI-wiki):
我们将所有拐角往前推进, 然后枚举其所有状态, 我们在拐角处分讨推出下一个状态。
插头就是经过轮廓线的线, 也就是还没闭合的线, 就是支出来的线头, 可知我们轮廓线的每个位置只有两个状态, 这样子状态数就下来, 专一的话分讨也少了。
P5056 【模板】插头 DP
考虑只能有一个闭合回路, 所以我们的状态和转移就要保证只能有一个, 并且要只根据状态即可判断, 因为统计的是方案数, 我们的判定只能依据DP数组里面有的状态, 那我们可以考虑将插头定义为两种, 左插头和右插头, 只有在最后一个位置, 才能将左插头和右插头拼上, 那么分讨转移即可。
考虑为了方便我们用四进制来写, 三进制也可以, 但是四进制状态太多, 我们存不下, 可以拿个哈希表存储有用的状态, 也就是上一行推出的状态开个哈希表存起来, 这样子就是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App