随笔分类 -  dp

摘要:线性DP LIS最长上升子序列 ——Longest increasing subsequence 转自blog 暴力: 为了上升我们肯定要知道我们当前阶段最后一个元素为多少,为了最长我们还要知道当前我们的序列有多长 设 \(F[i]\) 表示以 \(A[i]\) 为结尾的最长上升子序列的长度, 为了 阅读全文
posted @ 2020-11-05 09:34 ke_xin
摘要:数位DP 数位dp是一种计数用的dp,在每个数位上dp,一般就是要统计一个区间[l,r]内满足一些条件数的个数 。通常数据范围很大,10^18及以上 大部分可以直接套板子 typedef long long ll; int a[20]; ll dp[20][state];//用于记忆化搜索,不同题目 阅读全文
posted @ 2020-09-06 11:20 ke_xin
摘要:整数划分问题 给两个整数 \(n\) 和$k$。 将 n 划分成 k 个正整数之和的划分数 n=m1+m2+...+mi; (其中mi为正整数,并且1 ⇐ mi ⇐ n),则{m1,m2,...,mi}为n的一个划分。 如果{m1,m2,...,mi}中的最大值不超过m,即max(m1,m2,... 阅读全文
posted @ 2020-09-01 20:53 ke_xin 阅读(103) 评论(0) 推荐(0)
摘要:背包 blog背包九讲 n件物品,容量为V的背包,w价值,v体积 \(dp[i][j]=dp[i-1][j-k\*v[i]]+k\*w[i]\) 01背包 每个物品只有一件 k=1 memset(f,0xcf,sizoef(f)); f[0][0]=0; for(int i=1;i<=n;i++) 阅读全文
posted @ 2020-08-22 19:24 ke_xin 阅读(54) 评论(0) 推荐(0)
摘要:斜率优化 转自: https://www.cnblogs.com/MashiroSky/p/6009685.html 例1:任务安排1 蓝书或下面解答 https://www.luogu.com.cn/blog/ButterflyDew/solution-p2365 #include <iostre 阅读全文
posted @ 2020-08-17 20:57 ke_xin 阅读(57) 评论(0) 推荐(0)
摘要:单调队列dp 其实单调队列就是一种队列内的元素有单调性的队列,因为其单调性所以经常会被用来维护区间最值或者降低DP的维数已达到降维来减少空间及时间的目的。 单调队列与普通队列不一样的地方就在于单调队列是双端队列,既可以从队首出队,也可以从队尾出队。 队列q[ ]存的是下标、 单调队列中元素大小单调 阅读全文
posted @ 2020-08-16 15:24 ke_xin 阅读(64) 评论(0) 推荐(0)
摘要:前缀和优化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 阅读(389) 评论(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 阅读(54) 评论(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 阅读(33) 评论(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 阅读(105) 评论(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 阅读(57) 评论(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 阅读(36) 评论(0) 推荐(0)