动态规划
文章平均质量分 79
可可亚
这个作者很懒,什么都没留下…
展开
-
状态压缩dp
状态压缩dp思想例题思想主要是状态数量很多时,将状态转换成二进制数01010串,在将这些串在十进制中使用。特点:一般数据范围不会超过20。没啥好说的,来看看题吧例题P2704 [NOI2001] 炮兵阵地思路看到数据范围10*100不规则,还有个10,应该是状压(我们将每行的状态设置为0~(1<<10),表示是否在该点上放置守卫,由于每个炮兵能够攻击到上下2格的位置,那么炮兵能影响的是三行的位置。我们需要设置dp[n][cur][pre],表示当前到了第n行,同时该行原创 2021-05-14 12:16:51 · 164 阅读 · 0 评论 -
换根dp
换根dp解决的问题示例讲解例题解决的问题基于树上dp的基本模型,题目初始不给出根节点,需要遍历每一个根节点,达到某一个根节点的最佳情况。暴力的思路是循环每个节点作为根节点,同时在遍历整个树,时间复杂度是O(n2)O(n^2)O(n2)。换根dp主要就是将时间复杂度降到O(n)O(n)O(n),在根结点切换时,直接通过一些已经计算过的数据在O(1)O(1)O(1)就能得到另一个根的结果。一般是通过二次扫描,第一次dfs获得预处理数据,第二次dfs进行根节点切换示例讲解需要找到以x点为根结点的树,原创 2021-05-09 19:14:55 · 2019 阅读 · 0 评论 -
数位dp
数位dp解决的问题思想解题方法方法前置具体方法①递推法②记忆化搜索解决的问题一般给定一个区间l∼rl\sim rl∼r,算出所有满足某一条件的数的数量,一般可以解决10100010^{1000}101000级别的问题,如果暴力枚举,那么必定会超时,我们使用数位dp解决问题。思想不用传统的枚举每一位数在check一下,我们可以枚举每一位数可以的取值,用类似dfs搜索的方式枚举,然而如果纯用dfs枚举每一位数,那么最后时间复杂度不会改变,仍然要和暴力枚举一样枚举所有的数。这个时候到dp上场了,dp本原创 2021-02-14 14:35:42 · 253 阅读 · 0 评论 -
单调队列/单调栈
单调队列模型思想准备具体模版例题P1714 切蛋糕模型滑动窗口模型P1886 滑动窗口 /【模板】单调队列思想维护一个单调的队列,队列中删除无意义的数,例找最大值时维护一个单调递减的队列,假设有a[i]<a[j]a[i]<a[j]a[i]<a[j]并且i<ji<ji<j那么可以得知a[i]a[i]a[i]在题中无意义,因为假如a[i]a[i]a[i]可以当作最大值,那么a[j]a[j]a[j]一定也能,并且还优于a[i]a[i]a[i],只维护一原创 2021-01-17 19:10:23 · 301 阅读 · 0 评论 -
树形dp
树形dp总结例题1. 没有上司的舞会(简单dp)洛谷P1352总结树形dp主要是先建立一个树图, 对于每个结点定义一个状态,进行转移,通常用递归,通过类似深度优先遍历的方法,使得在回溯时更新全部结点例题1. 没有上司的舞会(简单dp)洛谷P1352大致题意: 有n个人,每个人之间有从属关系,每个人不想与上司之间同时参加舞会,每个人有一个快乐指数,问能参加舞会最大的快乐指数?解:定义dp[u][0]、dp[u][1]dp[u][0]、dp[u][1]dp[u][0]、dp[u][1]分别为 所有以原创 2020-11-30 22:05:20 · 79 阅读 · 0 评论