Algorithm 机器容量给定时,将给定重量的箱子从一个位置移动到另一个位置的最短时间

Algorithm 机器容量给定时,将给定重量的箱子从一个位置移动到另一个位置的最短时间,algorithm,data-structures,Algorithm,Data Structures,给定n个不同重量的箱子和m个不同承载能力的机器。找到移动所有箱子所需的最短时间 机器容量:C[0]、C[1]、C[2]、……C[m-1] 箱子重量:W[0],W[1],W[2]。。。。W[n] 每台机器搬运一次需要1分钟。 递归方法的最佳方法是尝试将当前框分配给给定的机器,而不是对其余的框进行分配和重复 注:一台机器可以多次搬运箱子,每次往返正好需要1个单位的时间。按照重量承载能力的降序对机器进行排序 按权重的递增顺序对框进行排序 现在,在每台机器上逐个添加箱子,直到机器的承载能力超过 当超过时

给定n个不同重量的箱子和m个不同承载能力的机器。找到移动所有箱子所需的最短时间

机器容量:C[0]、C[1]、C[2]、……C[m-1]

箱子重量:W[0],W[1],W[2]。。。。W[n]

每台机器搬运一次需要1分钟。 递归方法的最佳方法是尝试将当前框分配给给定的机器,而不是对其余的框进行分配和重复


注:一台机器可以多次搬运箱子,每次往返正好需要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
W[]//按递增顺序排序
C[]//按降序排序
i=0//box的指针
j=0//机器的指针
当前权重=0
所用时间=0
而我C[j]:
当前权重=0
j=j+1
耗时=耗时+1
其他的
i=i+1
结束时
打印时间_+1
检查边界情况。例如,如果
j
超过
m-1

编辑:以防同一台机器可以携带多次

维护机器的排序堆栈[按降序排序]。当机器装满并离开运输时,将机器从堆栈中弹出并排队。一旦机器准备好再次搬运(从运输作业返回后),将其从队列中取出并推回到堆栈上


假设:机器从源移动到目标的时间为1分钟。机器从目的地返回到来源地的时间为1分钟。

如果一台机器多次往返,会发生什么情况?你没有考虑问题中尚未明确说明的情况,同一台机器是否可以多次搬运箱子?