问题陈述:您有n1个大小为s1的项目,n2个大小为s2的项目,以及n3个大小为s3的项目。您希望将所有这些物品装入每个容量为C的容器中,以便最大限度地减少使用的垃圾箱总数。
我的解决方案:
Bin(C,N1,N2,N3) = max{Bin(C-N1,N1-1,N2,N3)+N1 if N1<=C and N1>0,
Bin(C-N2,N1,N2-1,N3)+N2 if N2<=C and N2>0,
Bin(C-N3,N1,N2,N3-1)+N3 if N3<=C and N3>0,
0 otherwise}
上述解决方案仅有效填充单个箱柜。任何人都可以建议如何修改上述关系,以便获得用于有效包装物品的总箱数?
答案 0 :(得分:0)
<强>问题强> 您有n1个大小为s1的项目和n2个大小为s2的项目。您必须将所有这些物品装入容器C中的每个容器中,以便最大限度地减少使用的容器总数。为这种包装设计多项式时间算法。
以下是我对此问题的解决方案,它与您提出的问题非常相似。
DP方法 假设Bin(i,j)给出最小的二进制数,然后Bin(i,j)= min {Bin(i',j')+ Bin(i - i',j - j')}其中i + j&gt;我'+ j'&gt; 0.将有n ^ 2 - 2个不同的(i',j')组合和一对(n1,n2)组合。所以复杂性大约是O(n ^ 2)。
<强>复杂性强> 为O(n ^ 2)
实施例: 设s1 = 3,n1 = 2,s2 = 2,n2 = 2,C = 4.找到所需的最小容器,即b。
<pre>
i j b
- - -
0 1 1
0 2 2
1 0 1
1 1 1
1 2 2
2 0 2
2 1 3
2 2 3 -> (n1,n2) pair
</pre>
你可以看到,需要3个箱子。
<pre>
Note that Bin(2,2) = min{
Bin(2,1) + Bin(0,1),
Bin(2,0) + Bin(0,2),
Bin(1,2) + Bin(1,0),
Bin(1,1) + Bin(1,1)}
= min{3, 4}
= 3
</pre>