随笔分类 - DP
摘要:题面 传送门:[UOJ][1] Solution ~~这题的数位DP好蛋疼啊qwq~~ 好吧,我们说回正题。 首先,我们先回忆一下LUCAS定理: $C_n^m \equiv C_{n/p}^{m/p} \times C_{n\%p}^{m\%p} (\%p)$ 我们仔细观察这个定理,就可以发现一个
阅读全文
摘要:题面: 传送门:https://www.luogu.org/problemnew/show/P2831 Solution 首先,我们可以先康一康题目的数据范围:n<=18,应该是状压或者是搜索。 事实上,这题搜索和状压DP都是能做的。 (因为搜索在我心中留下了阴影(斗地主),所以在这里,我讲状压DP
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P3953 Solution 这是一道神题 首先,我们不妨想一下K=0,即求最短路方案数的部分分。 我们很容易可以想到一个做法,就是魔改迪杰斯特拉做法: 如果一个点可以更新到达其他点的距离,那个点的方案数就是这
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1066 Solution 这是一道神奇的题目,我们有两种方法来处理这个问题,一种是DP,一种是组合数。 这题需要高精度,以下省略此声明 . 如果你对数学不感兴趣/喜欢写DP/(不想虐待自己),这里是DP做法
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P3959 Solution 这道题的是一道很巧妙的状压DP题。 首先,看到数据范围,应该状压DP没错了。 根据我们之前状压方程的设计经验,我们很快就能设计出这样的方程: 设f[i][j]表示用到第i个元素,当
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1450 Solution 这是一道很有意思的在背包里面做容斥的题目。 首先,我们可以很轻松地想到暴力做背包的做法。 就是对于每一次询问,我们都做一次背包。 复杂度O(tot*s*log(di)) (使用二进
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P2014 Solution 这是一道十分经典的树形DP题,这种类型的树形DP有一种很普遍的解法。 首先,观察题目,我们把这道题转换一下:给定一颗树,选出包含1号节点(根)的一颗子树,使得点权和最大。 我们可以
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1122 Solution 这是一道简单的树形DP题。 首先,我们可以转换一下题面,可以发现,题目要求我们求出一颗树上的最大联通子图。 因为我们是在树上取的,实际上就是取一颗子树。 这个就是最基础的树形DP模
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1613 Solution 挺有意思的一道题。 题面已经挺明显的描述出了这题的主要思想:倍增。 先这样想,我们可以把这题这样建模:有一堆点,若两个点之间的距离之和可以达到2的n次方,那么这两个点可以用1的时间
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P3119 Solution 这题显然要先把缩点做了。 然后我们就可以考虑如何处理走反向边的问题。 像我这样的蒟蒻,当然是使用搜索,带记忆化的那种(滑稽)。 考虑设f(i,j)表示到达第i个点,还能走j次反向边
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P4147 Solution 裸的求极大子矩阵 感谢wzj dalao的教学 首先,有一个很显然但很重要的结论,那就是求极大子矩阵肯定要贴着边或一个障碍点,否则就会浪费 根据这个定理,我们可以考虑一种做法 我们
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P2051 Solution 看到这题,我们不妨先看一下数据范围 30pt:n,m<=6 显然搜索,直接爆搜水过 复杂度O(n^m(吧)) 50pt: n<=100,m<=8 是状压/网络流的复杂度 当然,这题
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1006 Solution 挺显然但需要一定理解的网络(应该是那么叫吧)DP 首先有一个显然但重要的结论要发现:从左上走到右下再从右下走回左上=从左上走两次到右下 那么接下来可以考虑: 设f[i][j][k]
阅读全文
摘要:题面 传送门:https://www.luogu.org/problemnew/show/P1005 Solution 我们可以先考虑贪心 我们每一次都选左右两边尽可能小的数,方便大的放在后面 听起来挺OK的 实则并不OK 反例: 3 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 如果
阅读全文
摘要:题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟蒻第一反应就是dfs,想法也很简单: 枚举n个数中的每一个数,枚举完每一种情况都判断一下是否满足要求
阅读全文
摘要:题面: 传送门:http://poj.openjudge.cn/practice/1009/ Solution DP+DP 首先,我们可以很轻松地求出所有物品都要的情况下的选择方案数,一个简单的满背包DP就好 即:f[i][j]表示前i个物品装满容量为j的背包的方案数. 转移也很简单 f[i][j]
阅读全文

浙公网安备 33010602011771号