POJ_1064 二分搜索
2015-12-01 10:34
411 查看
/*POJ 1064 *题目大意:有N条绳子,他们的长度分别为Li,如果从他们中切割K条长度相同的绳子的话,这K条绳子每条最长能有多长?答案保留到小数点后2位 *算法分析:这个问题用二分搜索可以非常容易的求得答案。让我们套用二分搜索的模型试着解决这个问题。 * 令:条件C(x):=可以得到K条长度为x的绳子 * 则问题变成了求满足C(x)条件的最大的x。在区间初始化时, 只需使用充分大的数INF作为上界即可 * 现在的问题是是否可以高效的判断C(x)。由于长度为Li的绳子最多可以切出floor(Li/x)段长度为x的绳子,因此 * C(x) = (floor(Li/x)的总和是否大于或等于K)、、它可以在O(N)的时间内被判断出来。 */ int N, k; double L[MAX_N]; //判断是否满足条件 bool C(double x) { int num = 0; for (int i = 0; i<N; i++) num += (int) (L[i]/x); return num >= K; } void solve() { double lb = 0, ub = INF; for (int i = 0; i<100; i++) { double mid = (lb+ub) / 2; if (C(mid)) lb = mid; else ub = mid; } printf("%.2f\n",floor(ub*100) / 100); }
相关文章推荐
- 資料處理 - 資料庫欄位及物件屬性映射實作
- 非常实用的页面效果
- VS中快速生成json数据格式对应的实体
- 写给喜欢用Block的朋友(ios Block)
- 每天一个linux命令(11):less 命令
- 每月的第一天和最后一天oracle
- C-010.switch语句-----分支结构用作条件判断
- mybatis常用jdbcType数据类型
- org.apache.commons.lang3.StringUtils
- jQuery EasyUI使用教程之动态添加标签
- GitHub上史上最全的Android开源项目分类汇总
- juniper SSG开case需抓取的信息
- npm won't install packages “npm ERR! network tunneling socket could not be established, cause=Parse Error”
- content-type的作用
- java虚拟机
- android 加载等待Dialog
- asp.net验证码注册
- iOS开发之多媒体API
- Android之checkbox使用
- foreach循环简介