洛谷P2440 木材加工——二分

该博客探讨了一个关于木材切割的问题,目标是将n根原木切割成k段等长的小段,以使小段长度最大化。博主通过二分搜索的方法找到了解决此问题的策略,介绍了输入输出格式,并提供了具体的代码实现。在二分搜索过程中,定义了一个辅助函数f来判断当前切割尺寸是否合适,最终确定了最大可能的切割长度l。
摘要由CSDN通过智能技术生成

题目大意:

有n根原木,现在想把这些木头切割成k段长度均为l的小段木头(木头有可能有剩余)
小段木头越长越好,请求出l的最大值
木头长度的单位是cm,原木的长度都是正整数,我们要求切割得到的小段木头的长度也是正整数。
例如有两根原木长度分别为11和21,要求切割成等长的6段,很明显能切割出来的小段木头长度最长为5。

输入格式:

第一行是两个正整数 n,k分别表示原木的数量,需要得到的小段的数量。
接下来n行每行一个正整数 L_i ,表示一根原木的长度。

输出格式:

仅一行,即l的最大值。
如果连1cm长的小段都切不出来,输出 0。

思路:

首先我们输入 n 和 k 并且运用二分找到合适的尺寸,而l 必须要足够小,r 必须要足够的大。题中写道数组中的数最大不会超过 100000000 ,所以我们设 100000005 就可以了。
现在就走到了判断的环节,我们如何判断 mid 是太小还是太大呢?我们需要编写一个新函数 – f。
在函数 f 中,我们依次要判断 a 中的每一个数并计算出能切出多少个 mid ,还要用一个变量 ans 储存他们,如果 ans 分的分数比 k 多或者正好等于,返回真。如果是小于 k ,返回假。
当 f 返回的是真的时候,我们就要试试还能不能把 mid 调大一点,就要
l = mid;
如果返回的是假,我们就加的太大了,就要把mid 调小一点,就要
r = mid;
一直到结束&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值