【发布时间】:2012-11-19 07:01:45
【问题描述】:
当有 1 处房产时,我明白那里发生了什么。 当有超过 1 个属性时,我无法理解背包问题。
我必须编写一个使用具有 2 个属性的背包算法的程序。老师告诉我们,它必须在一个 3d 数组中完成。我无法想象这样的数组会是什么样子。
假设这是我的输入:
4 3 4 // number of records below, 1st property of backpack, 2nd property of backpack
1 1 1 // 1st property, 2nd property, cost
1 2 2 // 1st property, 2nd property, cost
2 3 3 // 1st property, 2nd property, cost
3 4 5 // 1st property, 2nd property, cost
输出看起来像这样:
4 // the cheapest sum of costs of 2 records
1 3 // numbers of these 2 records
输出说明: 2 组记录适合第一行输入:
(1) - 记录号 1 和记录号 3
1 1 1
+ 2 3 3
-------
3 4 4
(2) - 记录号 4
3 4 5
因为第一组记录是最便宜的(4
但现在,我只需要了解 3d 数组会是什么样子。你们中的一些人能帮我解决这个问题,并一层一层地展示,就像我的形象一样,这会是什么样子? 谢谢。
【问题讨论】:
-
我不确定我是否理解您的第一个数组。数组中的值是什么意思?
-
例如。在 V = 2 的背包和 V=1 的 1 2 个物品中,您最多可以放 2x V=1 物品。在 V = 3 的背包中,以及 V=1 和 V=1 的项目中,您可以最大限度地把这两个项目放在那里,所以它在那个单元格内是 v=2。在 v=3 和项目 1,1,2 的背包中,您最多可以放 2 个项目 (v=1,v=2),因此它给出 3。单元格内的值是背包的最大包装
-
@Paulina 我想我明白了。网格的列是用于后背的当前剩余体积(或其他属性)。这些行用于剩余可供选择的各种项目,按数量递增的顺序排序。假设我们有一个第 6 卷的背包。首先我们添加第 3 卷的项目,剩下的第 3 卷。然后我们查看第 3 列,我们将转到“2”行,因为我们已经使用了“ 3' 项目,我认为那个单元格应该是 '2'。我们添加“2”项,留下 1 的体积。在 1 列中,我们添加较低的“1”项,装满。我有这个权利吗?
-
是的 :P 你是对的 gmlobdell
标签: algorithm knapsack-problem