摘要: 一本通题解 T2: 再也不想碰这道题了。。。写了一下午。 我们先设状态 dp[i][j] 表示前i个刷匠,考虑了前 j 个木板后所获得的最大价值(j 个木板可以有空余)。 然后枚举前 i 个刷匠,枚举每一条木板。 对于一条木板可以此刷匠根本不刷,或不刷当前木板,状转方 阅读全文
posted @ 2025-01-18 14:37 daydreamer_zcxnb 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 状压dp 应用背景以集合为状态,集合一般可以用二进制表示,用二进制的位运算处理 集合问题一般是指数复杂度的,例如:1.子集问题,设n个元素没有先后关系,那么一共有 2n 个子集;2.排列问题,对所有n个元素进行全排列,共有 n! 个排列 状态压缩:主要就是dp的一种状态,与dp转移 阅读全文
posted @ 2025-01-18 14:35 daydreamer_zcxnb 阅读(20) 评论(0) 推荐(0) 编辑
摘要: 树形dp 树上做dp非常常见,因为树本身有子结构性质(树和子树) 一般解题思路:先把树转化为有根树(如果不连通的树,就加一个虚拟根,它连接所有孤立的树),然后在做dfs,递归到叶子节点,再一层层返回信息,就在这一步做dfs P2015 二叉苹果树 定义状态 dp[u][j] 表示以节点u为根 阅读全文
posted @ 2025-01-18 14:34 daydreamer_zcxnb 阅读(5) 评论(0) 推荐(0) 编辑
摘要: 数位dp T3: 应该先从这道题入手数位dp,首先理解数位dp,dp了什么东西 它是把一个数从低位拆到高位,相当于是较低位的方案数是较高位的子问题 个人认为数位dp写记忆化搜索更容易理解一点 看这道题,首先我们让我们分别求 0 9l r 出现的次数,我们先把 0 9阅读全文
posted @ 2025-01-18 14:32 daydreamer_zcxnb 阅读(10) 评论(0) 推荐(0) 编辑
摘要: 区间dp 先在小区间上进行dp得到最优解,然后再合并小区间的最优解求得大区间的最优解,解题时,先解决小区间的问题,再将小区间合并为大区间,合并操作一般是将两个相邻区间合并 注:合并顺序从小区间到大区间,因该先从小到大枚举区间的长度,递推出j在哪里 一本通题解 T3: 2025.1.23补档: 我之前 阅读全文
posted @ 2025-01-18 14:30 daydreamer_zcxnb 阅读(15) 评论(0) 推荐(0) 编辑
摘要: 线性dp理解 递推/记忆化搜索,有很多种理解方式 递归重叠子问题的记忆化搜索: 像这里例如 f[3] 可以通过一次计算得到,保存答案,下一次直接调用即可,省去很多复杂度 我们从此引出dp第一个性质:最优子结构 大问题的最优解包含小问题的最优解,并且小问题的最优解可以推导出大问题的最优解 递推 阅读全文
posted @ 2025-01-18 14:28 daydreamer_zcxnb 阅读(9) 评论(0) 推荐(0) 编辑
摘要: 前言 在整理总结题解的时候突然发现倍增这一章竟然连题解都没有写过,直接晕厥 T1: 直接做 T2: 首先根据倍增思想,现预处理出开 2j 次车,A/B先开车所到达的地点,和开的距离 这样两种查询,都可以根据预处理的来倍增求出 然后如何预处理呢? 我们维护一个链表,链表开始是所有城市按照高度 阅读全文
posted @ 2025-01-18 14:06 daydreamer_zcxnb 阅读(4) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示