栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

1、二分查找代码

找>=x的第一个位置

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

找<=x的第一个位置

while(l
	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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1034946.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号