摘要: 前缀和优化DP 例1: [洛谷P2513 HAOI2009]逆序对数列 设 \(f[i][j]\) 表示 前i个数字构成逆序对数为 j 的方案总数 \[ f[i][j]=\sum_{k=max(0,j-i-1)}^{j}{f[i][k]}\\ 令sum=\sum_{k=max(0,j-i-1)}^{ 阅读全文
posted @ 2020-08-15 17:41 ke_xin 阅读(323) 评论(0) 推荐(0) 编辑
摘要: 状压 一般看到数据范围是16左右的时候想状压dp 解决两类问题: 集合问题 棋盘问题 O(\(n^4\)) for(int s=0;s<(1<<n);s++) for(int t=0;t<(1<<n);t++) if(t&s==t) O(\(n^3\)) for(int s=0;s<(1<<n);s 阅读全文
posted @ 2020-08-15 17:35 ke_xin 阅读(48) 评论(0) 推荐(0) 编辑
摘要: DAG 上的 DP&环形DP 例1:Naptime https://www.luogu.com.cn/problem/SP283 解答详见蓝书 简化问题——每天从第1小时开始,到第N小时结束,线性 然后再强制第1小时和第N小时都睡觉,再dp一遍 最后取max 滚动数组滚掉一维 #include <i 阅读全文
posted @ 2020-08-15 17:25 ke_xin 阅读(29) 评论(0) 推荐(0) 编辑
摘要: 换根DP 换根法套路:枚举每个点为根做一遍dp 简化为二次扫描换根法 1,随便找一个点作为根进行dp, 2,再以原来点为根进行dp,此次dp,设最优解为 f[x],那么f[root]=d[root],这是显而易见的 然后再通过找d[son]与f[x]之间关系进行dp 例1:POJ3585 #incl 阅读全文
posted @ 2020-08-15 15:31 ke_xin 阅读(96) 评论(0) 推荐(0) 编辑
摘要: 树形dp summary 树形dp的主要实现形式是dfs,在dfs中dp,主要的实现形式是$dp[i] [j] [0/1]$,i 是以 i 为根的子树,j 是表示在以 i 为根的子树中选择 j 个子节点,0表示这个节点不选,1表示选择这个节点。有的时候 j 或0/1这一维可以压掉 选择节点/边类 \ 阅读全文
posted @ 2020-08-15 11:11 ke_xin 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 区间DP https://oi-wiki.org/dp/interval/ 例1:石子合并 破环成链 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; 阅读全文
posted @ 2020-08-15 11:07 ke_xin 阅读(31) 评论(0) 推荐(0) 编辑