背包问题
文章平均质量分 81
动态规划的经典题型
Lam Tang
十年编程两茫茫,工期短,需求长。千行代码,Bug何处藏。纵使上线又如何,新版本,继续忙。黑白颠倒没商量,睡地铺,吃食堂。夜半梦醒,无人在身旁。最怕灯火阑珊时,手机响,心里慌。
展开
-
背包问题之最优方案总数
此处的最优方案是指物品总价值最大的方案。这里以0-1背包问题为例。给定数据如下:c = [2,3,4,5,6,7,8];v = [3,4,5,6,7,8,9];V = 23;结合求最大总价值和方案总数两个问题的思路,最优方案的总数可采取如下方式求解:令 dp[i][j]dp[i][j]dp[i][j] 表示前 i 件物品在代价为 j 时的最大价值,key[i][j]key[i][j]ke...原创 2020-03-13 13:21:05 · 1368 阅读 · 0 评论 -
背包问题之输出最优方案
一般而言,背包问题要求一个最优解,若要求输出这个最优值的方案,可参照一般动态规划问题输出方案的方法:记录下每个状态的最优值是由状态转移方程的哪一项推出来的,也就是说,记录下它是由哪一项决策推出来的,便可以根据这个决策找到上一个状态,从上一个状态接着往前推即可,这里以0-1背包为例子,给定输入如下:c = [2,3,4,5,6,7,8];v = [3,4,5,6,7,8,9];V = 23;...原创 2020-03-13 13:19:53 · 2352 阅读 · 0 评论 -
背包问题之分组背包问题
问题描述:有N件物品和一个容量为V的背包。第 i 件物品的代价是 c[i],价值是 v[i]。这些物品被划分为若干组,每组中的物品相互冲突。最多选一件。求解将哪些物品放入背包可以在总代价不超过V的条件下(物品必须保持完整)使其其总价值最大。现有数据如下:c = [[1,2,3],[2,3,4],[5,6,7,8],[7,9]];v = [[2,3,4],[1,2,3],[4,5,6,7],[8...原创 2020-03-13 13:17:57 · 449 阅读 · 0 评论 -
背包问题之二维费用背包问题
问题描述:对于每种物品,都具有两种不同的代价 c1[i]c_1[i]c1[i] 与 c2[i]c_2[i]c2[i];选择该物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(上限)。问在每个物品只能使用一次的条件下,怎么选择物品(物品保持完整)可得到最大的价值。现有数据如下:c1 = [2,3,4,5,6,7,8]; // 代价1cap1 = 27; // 代价1的上限c2...原创 2020-03-13 13:16:43 · 428 阅读 · 0 评论 -
背包问题之混合背包问题
即前面三种背包问题混合起来,也就是说,有些物品只能取一次,有些物品可以取无限次,而有些物品可以取的次数有一个上限。问题描述如下:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]且第 i 种物品最多有 p[i] 件(其中 p[i]=0表示完全背包,p[i]=1表示0-1背包,剩下就表示多重背包问题。注意0-1背包问题是多重背包问题的特例)。背包容量...原创 2020-03-13 13:14:48 · 434 阅读 · 0 评论 -
背包问题之多重背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]且第 i 种物品最多有 p[i] 件。背包容量为 V,试问在每个物品不超过其上限的件数(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];p = [1,1,1,1]; // 结果与0-1背包一样。...原创 2020-03-13 13:13:02 · 558 阅读 · 0 评论 -
背包问题之完全背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,试问在每个物品有无限个(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 10;解题思路:令 dp[i][j]dp[i][j]dp[i][j] 表示从编号 1~i 的...原创 2020-03-13 13:11:11 · 648 阅读 · 0 评论 -
背包问题之0-1背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,试问在每个物品最多使用一次(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 8;解题思路:令 dp[i][j]dp[i][j]dp[i][j] 表示容量为 j 时放...原创 2020-03-13 13:07:35 · 843 阅读 · 0 评论 -
背包问题之分数背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,如何让背包装入的物品具有更大的价值总和(物品可以取一部分)。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 8;解题思路:该问题与0-1背包问题不同的是,该问题的求解可以使用贪心算法做出贪心策略,而0-1背包问题的求解需动态规划。本...原创 2020-03-13 13:05:15 · 2809 阅读 · 0 评论