问题如下:
你有一个包含n个对象的堆栈,每个对象都有卷Vi。你也有k个盒子,都有固定的体积V.对于堆栈顶部的每个物体,如果物体适合当前的盒子,你必须选择将它放入盒子并移动到下一个物体,或关闭此框并跳至下一个框。
每个方框的成本定义为方框中剩余的音量。
您的目标是将所有对象放入框中,并最小化所有框成本的总和。
我应该使用什么算法(我用图表思考一下)?
答案 0 :(得分:0)
这可以通过动态编程来解决。
状态可以是(整箱数,拍摄对象数)。
该功能是实现这种状态的最低总成本。
转换可以如下进行。
让我们从状态(box, obj)
开始,当我们已经知道实现它的最佳方式成本f[box][obj]
。
获取对象编号obj+1
,obj+2
,...
,直到其卷v[i]
的总和超过框容量V
。
在获取每个新对象i
后,如果我们关闭当前框会发生什么?
我们已达到状态(box + 1, i)
,费用为f[box][obj]
加上(V减去总量v[obj+1]
,v[obj+2]
,...
,{的平方{1}})。
如果到目前为止最好的方式是v[i]
,请将其分配给(box+1, i)
。
基数为f[box+1][i]
。
答案是f[0][0] = 0
,其中f[k][n]
是方框数,k
是对象数。
在伪代码中:
n