我们有两个盒子,大小分别为20和30.我们希望以一种给我们带来最大收益的方式包装水果。
Price Size APPLES 5 19 ORANGES 11 11 BANANAS 2 5 KIWI 8 16 MANGO 22 23 CHERRY 2 9
示例与杆切割问题非常相似。首先解决第一个盒子(尺寸为20)的杆切割问题,然后用剩余的项目解决第二个盒子(尺寸为30)的杆切割问题。反之亦然。
但后来我想出了这个例子: 如果我们首先打包第一个盒子(大小为20),最好的组合会产生橘子(11 | 11)和香蕉(2 | 5),它们给我们13和16的价格。棒切割'算法'将始终选择最佳的价格/尺寸组合。
现在让我们继续第二个框(大小为30)。 我们打包芒果(22 | 23)就是这样。我们已经用完了其他水果的空间。
本例中两个盒子的总收入相当于13 + 22 = 35.但是,我们的收入可能是37,第一个盒子里有Cherry(2 | 9),第二个盒子里有Bananas(2 | 5)之一。
如果我们先装好第二个更大的盒子,我们会得到正确的结果。但这样的方式(包装盒从较大的包装盒开始)总是有效吗?我相信,尽管从较大的盒子开始,但总会存在这种算法失败的情况。什么是更好的方法来解决这个问题?
修改 在这个例子中,我们有两个盒子,但它可能是N个盒子。我正在寻找一种解决方案,通常可以解决这个问题,N盒。