摘要: 区间型动态规划的典型例题是石子归并,同时使用记忆化搜索实现区间动归是一种比较容易实现的方式,避免了循环数组实现的时候一些边界的判断 n堆石子排列成一条线,我们可以将相邻的两堆石子进行合并,合并之后需要消耗的代价为这两堆石子的质量之和,问最小的合并代价 状态转移方程很容易给出: 因为要计算区间和,考虑 阅读全文
posted @ 2018-07-14 10:43 静听风吟。 阅读(1108) 评论(0) 推荐(0) 编辑
摘要: 棋盘型动态规划在二维平面上进行操作。根据当前状态的可能情况做出一个最优的判断,或是依赖当前状态拓展出新的状态,在拓展的过程中,依赖的可能是上一层的最优值也可能是上一层的全部值。 这应该是最容易理解的一种动态规划了,典型例题有数字三角形,比较神的题有方格取数和传纸条 我们这里给出的例子是传纸条问题的简 阅读全文
posted @ 2018-07-14 10:35 静听风吟。 阅读(992) 评论(0) 推荐(0) 编辑
摘要: 我们先来看分组背包问题 有N件物品和一个容量为V的背包,第i件物品的重量为c[i],价值为w[i],这些物品被划分成了若干组,每组中的物品互相冲突,最多选一件 问将哪些物品放入背包中可以使背包获得最大的价值 我们用f[k][v]表示前k种物品花费费用v所能取得的最大价值 给出状态转移方程: 可以看出 阅读全文
posted @ 2018-07-14 10:28 静听风吟。 阅读(3002) 评论(0) 推荐(0) 编辑
摘要: 顾名思义,二维费用的背包中的每种物品有两种费用 设f[i][v][u]表示前i件物品付出两种代价分别为v和u时可获得的最大价值 那么我们很容易给出状态转移方程,加一维状态即可 在这里,如果每种物品只可以取一次采用类似于01背包滚动数组的循环方式,即逆序循环 如果每种物品可以取无数次采用完全背包滚动数 阅读全文
posted @ 2018-07-14 10:09 静听风吟。 阅读(969) 评论(0) 推荐(0) 编辑
摘要: 我们首先来介绍一下多重背包是什么 可以这样理解:01背包≤多重背包≤完全背包 01背包每种物品最多选一件 完全背包每种物品可以选无数件,但受限制于背包的容量 多重背包每种物品可以选的件数是给出的,同样也受限制于背包的容量 多重背包在实现的时候可以进行二进制优化,大致思路是放多件的情况可以进行拆分成几 阅读全文
posted @ 2018-07-14 10:03 静听风吟。 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 有N种物品和一个容量为V的背包,每种物品的数量无限,第i种物品的重量为c[i],价值为w[i],将若干件物品装入背包,求背包所放物品的最大价值 这时每种物品都有取0件,取1件,取2件等若干种情况 采用朴素的实现方式是类比01背包的状态转移方程,我们给出这样的形式,我们令f[i][v]表示前i件物品恰 阅读全文
posted @ 2018-07-14 09:54 静听风吟。 阅读(713) 评论(0) 推荐(0) 编辑
摘要: 有N件物品和一个容量为C的背包,第i件物品的费用是c[i],价值是w[i],求将若干件物品放入背包所能够获得的最大价值。 每种物品只有一件,可以选择放或者是不放 使用f(i,v)表示前i件物品恰好放入一个容量为v的背包所能获得的最大价值 状态转移方程: 时间复杂度为O(N*V),空间复杂度可以优化为 阅读全文
posted @ 2018-07-14 09:39 静听风吟。 阅读(538) 评论(0) 推荐(0) 编辑