假设要把长度为 n 厘米的木棒切分为 1 厘米长的小段,但是 1 根木棒只能由 1 人切分,当木棒被切分为 3 段后,可以同时由 3 个人分别切分木棒。
思路很简单,优先队列即可,每次把最长的排出来切分,代码如下:
from queue import PriorityQueue
def splitStick(n, m):
ret = 0
q = PriorityQueue()
q.put(-n)
while not q.empty():
l = []
ret += 1
for i in range(m):
l.append(-q.get())
if q.empty(): break
for i in l:
a = i // 2
b = i - a
if a > 1: q.put(-a)
if b > 1: q.put(-b)
return ret
print(splitStick(100, 5))