python算法习题(十):木材加工

原创 2018年04月16日 15:24:57

1. 题目

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。

注意事项
木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回 0 即可。

样例:
有3根木头[232, 124, 456], k=7, 最大长度为114.

2. 思路

循环递增木头的根数直到满足要求。方式假如数量不够,根据截断N段后取剩余长度最大值的木头改变长度截成N+1段。

3. 代码

def woodCut(woods, num):
    length = max(woods)    # 初始化长度为最大值,也就是数量从1开始。
    while True:
        count = 0
        for wood in woods:
            count += wood//length  # 计算能够截断的段数
        if count >= num:          # 判断
            return length
        else:
            # 选出当前木头剩余长度最大的那根,改变长度使N+1
            ch_wood = max([(i, i%length) for i in woods], key=lambda x: x[1])[0]
            n = ch_wood // length
            length = ch_wood // (n+1)

print(woodCut([232, 124, 456], 7))
print(woodCut([232, 124, 456], 3))
print(woodCut([232, 124, 456], 2))
结果:
114
228
232

4. 总结

这里并不是傻瓜式的对木头每次减去单位长度再计算数量,而是有目的地改变长度使每次循环数量增加1。这样无疑效率提高了不少。只要思路搞懂了,代码其实挺简单的。快要离职了,没啥事做继续刷题。。。

版权声明:本文为博主原创文章,欢迎转载,但请注明原文出处。 https://blog.csdn.net/GiveMeFive_Y/article/details/79961181

木材加工

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 您在真实的面试中是否遇到...
  • fk5431
  • fk5431
  • 2015-12-16 13:56:55
  • 805

noip2005初赛-木材加工

noip2005C_4_2木材加工   题目描述: 木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有 剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段越长越好...
  • sjtu081200
  • sjtu081200
  • 2015-08-23 16:56:49
  • 1306

洛谷OJ - P2440 - 木材加工(二分答案)

题目描述 题目描述:木材厂有一些原木,现在想把这些木头切割成一些长度相同的小段木头(木头有可能有剩余),需要得到的小段的数目是给定的。当然,我们希望得到的小段木头越长越好,你的任务是计算能够得到的小段...
  • qq_34594236
  • qq_34594236
  • 2017-05-15 10:54:33
  • 630

lintcode 木材加工

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 样例 有3根木头[23...
  • u011822516
  • u011822516
  • 2015-11-05 09:59:47
  • 419

LintCode-木材加工

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 样例 有3根木头[23...
  • wangyuquanliuli
  • wangyuquanliuli
  • 2015-05-17 14:53:11
  • 3729

COJ 1031木材加工(二分)

这题类似上周的周赛的第一题:HDU 1969,周赛A题也是用的二分,而且解法和这题极其相似,要是这题做过的话,周赛那题也许就有思路会做了……做题不是太少了!加油吧!!! #include #inc...
  • u011466175
  • u011466175
  • 2013-10-19 18:32:46
  • 693

python算法习题(十):木材加工

1. 题目 有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 注意事项 ...
  • GiveMeFive_Y
  • GiveMeFive_Y
  • 2018-04-16 15:24:57
  • 9

LintCode : 木材加工

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。...
  • orekinana
  • orekinana
  • 2017-03-02 20:41:44
  • 149

lintcode-木材加工-183

有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 样例 有3根木...
  • ljlstart
  • ljlstart
  • 2015-10-14 22:17:31
  • 600

poj 2774 木材加工(dp/二分答案+贪心)

2774 木材加工(dp/二分答案+贪心)
  • PKU_ZZY
  • PKU_ZZY
  • 2016-07-21 12:55:08
  • 622
收藏助手
不良信息举报
您举报文章:python算法习题(十):木材加工
举报原因:
原因补充:

(最多只允许输入30个字)