题目
大概题目如下
有N根绳子,第i根长为Li,现需要m根等长绳子。
对n根绳子进行任意剪裁(不能拼接),计算出这m根绳子最长的长度
思路
既然是要得出裁剪后的绳子长度,那么 绳子长度是一定小于或等于 最长的绳子
(注意不是最短的绳子,如果最短的绳子和最长的绳子差距太大,舍去最短绳子一样能够 满足 m根的要求 而且都比 最短的绳子长)
且一定大于 0
要在(0,max )中找到一个 l 使 用它剪出的绳子 为 m 根
genius 的你,已经知道了,要使用 二分查找 ~~yabei
定义一个check函数 ,判断 长度为l的绳子 可以剪出多少根,返回res 代表
如果res > m,说明也许还能更长(~~sigei),即下限提高 , 按照二分查找的原理,此时的min= (max+min)/2
同理 res<m ,说明太长了,要将上限降低 max=mid;
(这样的话答案就只有一个了)
代码
public class test{
public static void main(String args[]) {
int m;//给定的根数
int num ;//总的绳子数
int nums[];//每根绳子的长度