poj1064

来源:互联网 发布:php 正则截取字符串 编辑:程序博客网 时间:2024/06/05 15:11
二分搜索法
首先区间初始化上界用充分大的数INF
那么在区间[0,INF]

中通过二分搜索法不断缩小范围一次循环可以把区间范围缩小一半,那么我们假设缩小100次那么可达到10的-30次方的精度范围,完全满足题目中的保留两位小数

末尾的精度特别注意,这是WA的想吐血


#include<iostream>#include<cstdio>#include<cmath>using namespace std;const int MAXN=10000;const long INF=100000;double L[MAXN];int N,K;int C(double x)//绳子切成长为x时{    int num=0;    for(int i=0;i<N;i++)    num+=(int)(L[i]/x);//当把绳子切成x的长度,求出可以切成多少段    return num>=K;//如果切成的绳子段数大于需要切出的段数} int main(){    int i;    while(cin>>N>>K){   double lb=0,ub=INF,mid;    for(i=0;i<N;i++)   cin>>L[i];    for(i=0;i<100;i++)//通过二分法查找精确度到达极小的范围    {      mid=(lb+ub)/2;     if(C(mid)) //如果(绳子长mid时)切成的绳子段数大于需要切出的段数,那么绳子可以切的更长         lb=mid;     else        ub=mid;//如果(绳子长mid时)切成的绳子段数小于需要切出的段数,那么绳子需要切的短一点    }printf("%.2f\n",floor(ub*100)/100);//特别注意此处的精度}return 0;} 

0 0
原创粉丝点击