POJ 1064 Cable master 二分的应用
2017-05-20 14:54
477 查看
题目:http://poj.org/problem?id=1064
题意:输入n根已有的电缆的长度(单位米),要求最终得到分成等长的k根,求分成的电缆长度的最大值(精确到厘米)。
思路:从最长的电缆开始二分,当分成mid长的电缆的段数比k大时,说明取小了,反之说明取大了。精度控制问题十分的坑,所以干脆二分100次足够细为止。另外,由于这是实际问题,不能四舍五入,需要向下精确。
代码:java
题意:输入n根已有的电缆的长度(单位米),要求最终得到分成等长的k根,求分成的电缆长度的最大值(精确到厘米)。
思路:从最长的电缆开始二分,当分成mid长的电缆的段数比k大时,说明取小了,反之说明取大了。精度控制问题十分的坑,所以干脆二分100次足够细为止。另外,由于这是实际问题,不能四舍五入,需要向下精确。
代码:java
import java.util.*; public class Main { public static void main(String[] args) { int maxn = 10000+10; double[] data = new double[maxn]; int n, k; Scanner sc = new Scanner(System.in); n = sc.nextInt(); k = sc.nextInt(); double maxx = 0; for(int i=0; i<n; i++) { data[i] = sc.nextDouble(); if(data[i]>maxx) { maxx = data[i]; } } sc.close(); double l = 0, r = maxx, mid = (l+r)/2.0; for(int i=0; i<100; i++) { int cnt = 0; for(int j=0; j<n; j++) { cnt += (int)(data[j]/mid); } if(cnt>=k) { l = mid; mid = (l+r)/2; } else { r = mid; mid = (l+r)/2; } } System.out.printf("%.2f\n", Math.floor(mid*100)/100); } }
相关文章推荐
- poj 1064 Cable master(二分)
- POJ 1064 Cable master(初遇二分)
- POJ 1064 && HDU 1551 Cable master(二分)
- poj 1064 二分 Cable master
- POJ 1064 Cable master (二分查找_经典题!!!)
- poj 1064 Cable master(二分水)
- poj 1064 Cable master ,二分 精度!!!
- POJ 1064 Cable master(二分求可行解)
- POJ1064——二分——Cable master
- poj1064 cable master(最大值问题:二分+贪心)
- poj 1064 Cable master(二分)
- poj 1064 Cable master【二分】
- [POJ] 1064 Cable master (二分查找)
- 【判断解是否可行-二分】POJ1064-Cable master
- POJ 1064 Cable master(很好玩的二分搜索)
- POJ 1064 Cable master (二分搜索)
- 二分搜索 POJ 1064 Cable master
- poj 1064 Cable master 【二分 + 精度控制】
- POJ - 1064 Cable master(二分搜索)
- POJ 1064 Cable master (二分答案)