
背包问题
RKGG爱吃鱼
每天进步一点点。
展开
-
动态规划-06分组背包
本文主要介绍一下“分组背包”,分组背包,即一开始选取的物品以及分成几个组,在选取时,可以从一个分组中选取一件物品或者一件物品也不选取,以此到达最大价值的选取目的。其方程也可以写成类似于“01背包”的方程,如下:c[k][j] = max(c[k-1][j], c[k-1][j-w[k-1][i]]+v[k-1][i])其中,k表示当前分组号,i表示当前分组中的第i件物品。以下为具体题目示...原创 2018-04-22 10:24:06 · 4047 阅读 · 0 评论 -
动态规划-07依赖背包
按照《背包九讲》的顺序,本文主要讲其第七讲-依赖背包,所谓“依赖背包”即指背包物件有主附件,类似的解释之前在“二维费用背包”中提到过,不过这里的主附件是从属关系,即选择主件,必须要选择附件,而附件的类别又可以有很多种,同样的附件也可以有附件,这样如此反复,即会形成一个“树形DP”,其结果和考虑的情况将呈指数型增长,所以无法写成类似于“01背包”的方程式,但如果给定限定条件,我们同样也可以将其转换成...原创 2018-04-22 13:15:09 · 615 阅读 · 0 评论 -
动态规划-01基础背包
最近在做华为OJ题,做到“购物单”一题,突然感觉一脸懵逼,有点熟悉却又思维混乱,研究了一下,发现是由来已久的背包问题,遂详细的了解一下该算法。这里将最简单的背包问题——即无重复选取,每个物品仅放一次,其核心方程如下:f[i][j] = max{f[i-1][j],f[i-1][j-[w[i-1]]]+v[i-1](j>=w[i-1])}假设:定义可容纳总重量W =10 Kg,物品种...原创 2018-04-19 10:14:56 · 348 阅读 · 1 评论 -
动态规划-02完全背包
继上一篇01基础背包,本文主要利用Java实现“完全背包”问题,该问题类似于基础背包问题,主要区别在于“完全背包”对于放置的物品个数没有限制,即可以重复选取,每个物品的选取放置次数可以是0、1、2······,情况相比基础背包要复杂的多,其核心方程也可以写成类似于01问题的方程,如下:c[i][j] = max(c[i-1][j-(k*w[i-1])] + k*v[i-1], c[i-1][j...原创 2018-04-20 10:54:22 · 977 阅读 · 0 评论 -
动态规划-03多重背包
紧接前面一篇,讲一下“多重背包”问题,该问题与“完全背包”相比,在每个物品的选取次数上给出了限定,即选取次数k不能无限的增大,其方程和“完全背包”的极度相似,只是k的限定条件发生了变化。c[i][j] = max(c[i-1][j-(k*w[i-1])] + k*v[i-1], c[i-1][j]) (0 <= k <= counts[i])其中,counts[i]表示第i件...原创 2018-04-20 14:58:25 · 956 阅读 · 0 评论 -
动态规划-04混合背包
前面的三种背包问题介绍完后,基于这三种背包问题可以引申出这三类的混合形式-混合背包问题。可以两两混合,也可以三种混合,无非是在分析的时候,根据每个物品的出现次数将其分类组合。假设:定义可容纳总重量W =10 Kg,物品种类 N = 3,每件物品重量w[i],对应价值v[i],求解在可容纳重量范围内如何选取可获最大价值。具体题目:可能出现的情况:由于使用二维数组较为繁琐,以下...原创 2018-04-20 15:46:01 · 463 阅读 · 0 评论 -
动态规划-05二维费用背包
前面4篇博客已经将几种基础背包问题介绍,本文主要对“二维费用”背包问题进行介绍。“二维费用”背包问题,较前面几种背包问题主要是对每类物品增加了一维费用,用一个简单的例子来说,即选取某一个物品的同时增加了一个附属物品,同时对附属物品的费用也有了限制,通过这种思维,可以将“二维费用”背包转换为“01基础背包”问题,按照“01基础背包”方程可以得到该基础方程:c[i][j][k] = max(c[...原创 2018-04-21 10:40:59 · 1204 阅读 · 0 评论