随笔分类 -  DP

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