思路:贪心算法

首先将所有棍子按照长度从小到大排序,如果长度相同则按照宽度从小到大排序。之后按照顺序加工每一根棍子,如果当前棍子的长度和宽度都大于等于上一根棍子,则不需要准备时间;否则需要准备时间。

具体实现时,我们可以定义一个变量 'last' 表示上一根被加工的棍子,初始值为第一根棍子。然后对于每一根棍子 'i',如果 'i' 的长度和宽度都大于等于 'last',则将 'last' 更新为 'i',否则将准备时间加 1 并将 'last' 更新为 'i',表示需要准备时间。

最后返回准备时间即可。

代码:

def min_prepare_time(sticks):
  sticks.sort(key=lambda x: (x[0], x[1]))
  last = sticks[0]
  prepare_time = 0
  for i in range(1, len(sticks)):
    if sticks[i][0] >= last[0] and sticks[i][1] >= last[1]:
      last = sticks[i]
    else:
      prepare_time += 1
      last = sticks[i]
  return prepare_time

例如,你有 5 根棍子,长度和宽度分别为 (4, 9), (5, 2), (2, 1), (3, 5), (1, 4),最短准备时间为 2(按 (4, 9), (3, 5), (1, 4), (5, 2), (2, 1) 的次序进行加工)。

木头棍子加工最短准备时间 - 贪心算法优化

原文地址: https://www.cveoy.top/t/topic/n4kQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录