二分、三分、01分数规划1——二分查找

本文介绍了二分查找的基本原理及C++STL中的实现,包括`binary_search`、`lower_bound`和`upper_bound`函数。此外,通过两个实例展示了如何利用二分查找进行优化,解决实际问题,如最大化奶牛间距离和最小化晾干衣服时间。
摘要由CSDN通过智能技术生成

二分、三分、01分数规划1——二分查找

1、二分查找代码

找>=x的第一个位置

while(l<r)
{
	mid=(l+r)/2;
	if(a[mid]>=x) r=mid-1;
	else l=mid+1;
}
//结果为 r+1,即 l

找<=x的第一个位置

while(l<r)
{
	mid=(l+r)/2;
	if(a[mid]<=x) l=mid+1;
	else r=mid-1;
}
//结果为 l-1 ,即 r

2、C++ STL的二分查找函数

binary_search 返回bool值,是否存在

lower_bound 返回可插入的最小值位置的迭代器
即返回第一个符号条件的元素位置

upper_bound返回可插入的最大位置的迭代器
即返回最后一个符合条件的元素位置

例,lower_bound(a,a+11,55);

3、二分答案+检验

二分枚举+检验:求解类问题转化为验证类问题

例题1:牛棚

N个牛棚在x轴上,已知它们的坐标xi,有C只奶牛,要放进牛棚,每个牛棚只能放一只奶牛,要求奶牛间距离最近的距离最大,求这个距离。

思路(枚举距离x + 检验对应结果)
假设奶牛间距离为x,依次将奶牛放在距离>=x的牛棚中,统计一共放下的奶牛数量cnt。如果cnt大于奶牛数量C,试着将距离x增大,重新检验;如果cnt小于奶牛数量C,将距离x减小,重新检验。
最后输出合适距离x

例题2:Drying

n件衣服要晾干,每件含水量ai,每件衣服每分钟自然风干1单位的水,每分钟可对其中的任意一件使用吹风机,其可以减少k的水。求晾干所有衣服的最少时间。

思路(枚举晾干衣服时间t + 检验对应结果)
假设晾干时间为t,将衣服按时间t分为两大类,t时间内可以自然风干的、需要借助吹风机吹干的。计算用吹风机花在每件衣服上的总和sum,比较sum与t,如果sum小于t,可试着适当减小t的值,重新检验;如果sum大于t,增大t的值,重新检验。
最后输出合适的t

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值