给定N
个对象并且它们是1~n
,第i个对象的音量为ti
和ti <= M
;同时,有很多盒子,每个盒子的体积是M
。现在我们应该将所有这些对象放入 1~N 的框中,应该使用最小数量的框?
例如,有5个对象,其体积为{7,2,5,3,9}
,顺序为1~5。每个盒子的体积是10.因此最佳解决方案是3个盒子,它们分别是{7},{2,5,3},{9}
。
我的解决方案:贪心算法。假设第i个对象的最优解是x个框被填充而剩余空间是y,那么对于i + 1对象,如果其体积大于y,则必须将其放入另一个新框中。否则,一个选项是将其放入当前框中,解决方案是(x,y-v);另一种选择是把它放到另一个新盒子里,解决方法是(x + 1,M-v)。
问题:如何使用动态编程解决它?
答案 0 :(得分:0)
我不明白你为什么要用DP来解决它,因为你有一个非常好的贪心解决方案,但这是基于DP的想法:
让F(k)
成为第一个k
个对象的答案 - 我们可以将它们放入最小的方框数。
让我们循环浏览最后一个框中放置的对象数量:
F(k) = min{F(l) + 1|l < k, t_(l+1) + t_(l+2) + .. + t_(k) <= M}
F(0) = 0
如果我们为每个O(N*N)
动态计算t_i
的总和,则复杂度为k