动态规划
文章平均质量分 89
将一个问题分解为相同类型的子问题。对应的实现方法是记忆化搜索,也可以将其写成递推的写法。
wuzy38
这个作者很懒,什么都没留下…
展开
-
树状DP UVa1218-Perfect Service
树状DP就是在树上的DP,指当前节点的解可以通过子孙节点的解求出,即状态转移方程是由子孙节点推出当前节点的。 使用遍历方法:由于树的一个特性,即任意两个节点之间只有一条路径,因此深搜时每个点只会访问一次,所以我们通常使用深搜来遍历,这时复杂度只有O(n)。在推出状态转移方程后,深搜大致过程如下(具体更新节点信息的位置视情况而定): void dfs(int v, int fa) { ...原创 2019-04-01 01:39:55 · 122 阅读 · 0 评论 -
状态压缩DP UVa10817-Headmaster's Headache
状态压缩是指使用计算机二进制位来存储状态,一般用法是将二进制串当做一个集合,bit位代表集合中的元素,bit位取值表示元素是否在集合中。n位二进制串可以描述2^n种集合(状态),因此对于n的取值是相当严格的。状态压缩DP中需要使用各种位运算来描述状态转换。所以需要对位运算的使用有一定的了解,下面是一些巧妙的运用。 把一个数字x最靠右的第一个1去掉 : x = x & (x-1) 判断数...原创 2019-04-01 11:37:40 · 3209 阅读 · 0 评论 -
数位DP codeforces55(D)-Beautiful numbers
数位DP: 用来统计区间内符合条件的数的个数,通常区间范围很大,并且条件通常与数的组成有关。 解题关键:对前缀的抽象分类。须符合两个条件。 对于一个数anan-1……a2a1a0, 可以将前缀anan-1…ak+1归类于状态(sta,k), 使得具有相同状态的前缀的解一致。 可以求解,在状态(sta,k)下,dkdk-1…d1d0中符合条件的数字的个数。 实现方法是记忆化搜索。dp[k][...原创 2019-04-03 22:24:16 · 307 阅读 · 0 评论 -
期望DP POJ2096-Collecting Bugs
题意 n种bug,s个子程序。每天随机找一个bug,允许重复。求每种bug都找到,每个程序都找到bug的期望天数 分析 这是一个期望DP,对于期望DP通常是逆向推。即用dp值表示从当前状态到达终止状态的期望值,然后由终止状态推导至初始状态。 这里我们可以以已找到bug种类数量和已完成子程序数量作为状态,dp值表示从当前状态到达终止状态的期望天数。 对于一个状态(i,j),i表示已找到的bug种类数...原创 2019-04-22 21:56:25 · 177 阅读 · 0 评论 -
单调队列优化DP Hdu3401-Trade
题目原创 2019-05-29 10:49:26 · 217 阅读 · 0 评论 -
期望DP HDU4418-Time travel
一般情况下,期望DP逆向推。期望DP中,若当前状态的下一状态可能往前走也可能往后走,则使用解方程的思想,将状态设为变量,将状态转移方程转化为变量方程,构造矩阵。通过高斯消元求解。 题意 ...原创 2019-05-12 18:35:11 · 235 阅读 · 0 评论 -
二进制优化DP Hdu1059-Diving
多重背包的复杂度为O(n * m * k),其中n为背包总容量,m为物品种类数,k为一种物品的数量。实际上等价于01背包。 二进制优化,是将一种物品的数量分解成1, 2, 4, 8, …, 2x, k-2x+1+1份并组成新的物品,注意除了最后一个数,其他数都是2的幂次。此时选择任意数量的该原物品,都可以等价表示成选择分解后的某几个新物品。选择新物品的任意组合,都可以表示成选择一定数量的原物品。 ...原创 2019-05-20 10:47:33 · 227 阅读 · 0 评论 -
状态压缩DP Csu2169-排列
题意 给一个长度为 n 的序列 p1, p2, …, pn 和 m 个二元组 (a1, b1),(a2, b2),…,(am, bm). 排列数列 p,使得 ∑i=1m∣pai−pbi∣\sum_{i = 1}^m |p_{a_i} - p_{b_i}|∑i=1m∣pai−pbi∣ 最小。求最小值。 分析 按序放置元素,状态表示位置是否为空。Bitcnt(status)表示此时该选择的元...原创 2019-05-20 10:43:50 · 232 阅读 · 0 评论