给出n盒不同重量和不同重量承载能力的m机器。找到移动所有盒子所需的最短时间。
机器容量:C [0],C [1],C [2],........ C [m-1]。
框权重:W [0],W [1],W [2] .... W [n]。
每台机器需要1分钟才能携带一次。 什么是最佳方法递归方法是尝试将当前盒子分配给给定的机器而不为其余的盒子分配和重复。
注意:一台机器可以多次携带盒子,每次往返只花费1个单位时间。
答案 0 :(得分:1)
按重量承载能力的降序对机器进行分类。
按重量递增顺序对框进行排序。
现在,逐个添加盒子到每台机器,直到机器的承重能力超过。
当它超过时,移动到下一台机器。
<强>伪代码:强>
W[] //sorted in increasing order
C[] //sorted in decreasing order
i = 0 //pointer for box
j = 0 //pointer for machine
curr_weight = 0
time_taken = 0
while i<n:
curr_weight = curr_weight + W[i]
if curr_weight > C[j]:
curr_weight = 0
j = j + 1
time_taken = time_taken + 1
else
i = i + 1
end while
print time_taken + 1
检查边界情况。例如,如果j
超过m-1
编辑:如果同一台机器可以多次携带
为机器维护已排序的 STACK [按降序排序]。一旦机器充满并离开运输,从 STACK 中弹出机器并将其排入 QUEUE 。一旦机器准备再次运输(从运输工作返回后),将其从 QUEUE 出列并将其推回 STACK 。
假设:从机器的源到目的地的时间是1分钟。从机器的目的地返回到源的时间是1分钟。