算法91----切绳子

Posted lee-yl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法91----切绳子相关的知识,希望对你有一定的参考价值。

不能一、题目:切绳子

 有n根绳子,第i根绳子长度为Li,现在需要M根等长的绳子,你可以对n根绳子进行任意裁剪(不能拼接),计算出这m根绳子最长的长度是多少。

输入:第一行2个正整数N,M,表示N根原始的绳子,和最终需要M根绳子数

第二行包含N 个整数,第i个整数Li表示第i根绳子的长度

其中,1≤N、M≤100000,0 <Li<1000000000

输出一个数字,表示裁剪后最长的长度,保留两位小数。

输入:

3 4

3 5 4

输出:

2.5

 

二、思路:

  在绳子长度中进行二分查找最长的长度,然后计算能切出来的绳子根数总和,如果能达到则返回结果。

三、代码

def cut(L,n,m):
    sumN = 0
    for i in range(n):
        sumN += L[i]
    if sumN < m:
        print(0)
        return False
    if n >= m:
        print(L[0])
  #l为最大长度/m,u为所有长度和/m。 l , u
= max(L)/m , sumN(L)/m while round(l,3) < round(u,3): mid = (l + u ) / 2 sumN = 0 for i in range(n): sumN += L[i] // mid if sumN < m: u = mid else: l = mid print(round(l,2)) return True n , m = input().split() n , m = int(n) , int(m) L = list(map(int,input().split())) cut(L,n,m)

 

以上是关于算法91----切绳子的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(算法)- 343. 整数拆分

P1577 切绳子

P1577 切绳子

洛谷—— P1577 切绳子

luogu P1577 切绳子

LeetCode(剑指 Offer)- 14- I. 剪绳子