POJ_1064 二分搜索

来源:互联网 发布:淘宝网鞋子女鞋图片 编辑:程序博客网 时间:2024/06/05 19:19
/*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);}

0 0