切金条最省铜板问题(python)

题目是:一块金条切成两半,是需要花费和长度数值一样的铜板的。比如 长度为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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值