题目是:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为20的 金条,不管切成长度多大的两半,都要花费20个铜 板。一群人想整分整块金 条,怎么分最省铜板?
思路比较简单:建造一个最小堆(用数组也能实现,主要就是为了取出最小的两个数),然后把这两个数求和放在原数组在取出最小的两个数,直到只剩下最后一个数。
from heapq import *
res = []
for i in k:
heappush(res, i)
out = 0
while len(res) > 1:
a = heappop(res)
b = heappop(res)
out += a + b
heappush(res, a + b)
数组实现,不过每次都要sort
k = 0
while len(res) > 1:
res.sort()
a = res[0]
b = res[1]
again = a + b
k += res[0] + res[1]
del(res[1])
del(res[0])
res.append(again)
print(k)