随笔分类 -  动态规划

摘要:【题目链接】 点击打开链接 【算法】 树形背包 注意是一棵森林 【代码】 阅读全文
posted @ 2018-05-17 22:25 evenbao 阅读(128) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 先预处理 : 将序列反转,求最长下降子序列 对于每个询问,根据字典序性质,贪心即可 【代码】 阅读全文
posted @ 2018-05-16 23:03 evenbao 阅读(157) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 f[i][j]表示以i为根的子树中,最少删多少条边可以组成j个节点的子树 树上背包,即可 【代码】 阅读全文
posted @ 2018-05-16 19:54 evenbao 阅读(128) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 f[i]表示深度小于等于i的严格n元树 显然,一棵深度小于等于i的严格n元树,就是一个根节点,下面有n棵子树,这n棵子树都是深度小于等于i-1的严格n元树,每棵子树有f[i-1]种形态,根据乘法原理, 可知f[i] = f[i-1] ^ n + 1 那么最后f[ 阅读全文
posted @ 2018-05-15 21:20 evenbao 阅读(175) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 树形DP ans = min{ | total - 2 * sum[k] | } (sum为以k为根的子树的权值和) 【代码】 阅读全文
posted @ 2018-05-15 21:09 evenbao 阅读(116) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 同样是树形DP,但是比较难,笔者做这题看了题解 令f[i][j]表示在以i为根的子树中 1.在以i为根的子树中建一些消防站 2.在节点j必须建一个消防站 3.以i为根的子树中,每个节点在满足距离不超过D的前提下,选一个子树内的节点或节点j作为“负责站” 4.节点 阅读全文
posted @ 2018-05-15 21:05 evenbao 阅读(168) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 树形DP 令f[i][0]表示 : 以i为根的子树中,若i不参加宴会,所能获得的最大愉悦值 f[i][1]表示 : 以i为根的子树中,若i参加宴会,所能获得的最大愉悦值 那么,如果i不参加宴会,它的下属就可以参加宴会,也可以不参加宴会,因此 : f[i][0] 阅读全文
posted @ 2018-05-15 20:44 evenbao 阅读(123) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 树形DP f[i][j]表示以i为根的子树中,选了j个叶子节点,所能带来的最大收益 不难发现这就是一个经典的背包问题,不过是在树上做背包罢了 最后,判断f[1][i]是否大于等于0,输出最大的i 【代码】 阅读全文
posted @ 2018-05-13 23:01 evenbao 阅读(136) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 这题描述有些繁琐,先简化一下题意 : 对于一棵无根树,删除一个节点,使得其余的联通块中,最大的联通块最小 那么,这题就很好做了 对这棵树进行一遍DFS,求出每个节点为根的子树的大小(记为size),再求出删除节点后,子树中最大的联通块的大小(记为mx) 那么,删 阅读全文
posted @ 2018-05-13 22:56 evenbao 阅读(94) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 我们知道,一棵树上离某个节点最远的节点,可能是经过它的祖先,再到那个祖先的某个孩子,或者,是它的那颗子树中,离它最远的一个节点,就不难想到以下算法 : 第一遍DFS,搜出每个节点的子树中离它距离最远的孩子的距离和所经过的儿子,离它次远的孩子的距离和所经过的儿子 阅读全文
posted @ 2018-05-13 22:47 evenbao 阅读(111) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 这题有一个性质 : 位于顶层的干草堆可以满足宽度最小且高度最高 根据这个性质,用单调队列优化DP,即可 【代码】 阅读全文
posted @ 2018-05-12 09:41 evenbao 阅读(161) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 令cost(i,j) = 第i天到第j天走相同的路线,路线长度的最小值 那么,只需筛选出第i天到第j天可以装卸货物的码头,然后将这些码头之间连边,跑弗洛伊德(或其它最短路算法),即可 然后,我们用f[i]表示前i天,总成本最小是多少,显然有 : f[i] = m 阅读全文
posted @ 2018-05-11 21:10 evenbao 阅读(149) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 f[i][j]表示第i段到第j段,最少需要多少次全部消除 那么,当color[i] = color[j]时 : 若s[i] + s[j] > 2,根据题目中所说的“连锁反应”,很容易得到f[i][j] = f[i+1][j-1] 若s[i] + s[j] = 2 阅读全文
posted @ 2018-05-10 20:56 evenbao 阅读(201) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 先考虑50分的做法 : f[i]表示以i结尾的本质不同的上升子序列的个数 则f[i] = sigma(f[j]) (j < i,a[j] < a[i]),注意如果a[j]不止一个,只需加上下标最大的即可,否则会重复计数 那么,100分的做法,其实就是用树状数组来 阅读全文
posted @ 2018-05-10 20:50 evenbao 阅读(136) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 动态规划 我们发现,M只有两种取值,1和2,那么,只需分类讨论即可 当M = 1时,其实这个问题就成了就最大连续子段和的问题,只不过要选K段而已 用f[i][j]表示选到第i行,选了j段,那么,显然有 : f[i][j] = max{f[i-1][j],f[k] 阅读全文
posted @ 2018-05-09 19:53 evenbao 阅读(141) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 和HDU2167类似 先搜出一行内符合的状态,然后,f[i][j][k]表示第i行,第j种状态,放了k个,合法的方案,DP即可 【代码】 阅读全文
posted @ 2018-05-09 19:24 evenbao 阅读(107) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 状压DP 先搜出一行符合的情况,然后,f[i][j]表示第i行,状态为j,能够取得的最大值,DP即可 【代码】 阅读全文
posted @ 2018-05-09 19:20 evenbao 阅读(177) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 动态规划 f[i][j][x][y]表示当前选了i个男生,j个女生,男生与女生差最大为x,女生与男生差最大为y的方案数 转移很显然,笔者不再赘述 【代码】 阅读全文
posted @ 2018-05-07 22:09 evenbao 阅读(116) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 此题是一道好题! 首先,我们发现 : 付款方法数 = 不受限制的方法数 - 受限制的方法数 那么,我们怎么求呢? 我们用dp求出不受限制的方法数(f[i]表示买i元的东西,不受硬币限制,有多少种方案),只需用01背包的 方法就可以了,实现非常简单 那么受限制的方 阅读全文
posted @ 2018-05-06 22:42 evenbao 阅读(172) 评论(0) 推荐(0)
摘要:【题目链接】 点击打开链接 【算法】 动态规划 f[i]表示上一次打了第i只鼹鼠,所能打死的最多的鼹鼠数量 【代码】 阅读全文
posted @ 2018-05-05 22:23 evenbao 阅读(117) 评论(0) 推荐(0)