搜索--15

来源:互联网 发布:中国网络经纪人 安居客 编辑:程序博客网 时间:2024/05/18 01:37

题目大概:

输出n根木棍的长度,把它们折成m根相同长度的木棍,问折成的最大长度是多少。

思路:

这个题是以前做过的一道非常坑爹的二分题。队精度要求较高。就是最后不能四舍五入。

感想:

这个也勉强算是广搜吧,不知道为什么吧这道题放在搜索里。

代码:

#include <iostream>#include <cmath>#include <algorithm>using namespace std; double l,r=0,mid;double sum=0; double a[100600];int main(){int n,m,j=0;while(scanf("%d%d",&n,&m)){if(n==0&&m==0)break;for(int i=0;i<n;i++){scanf("%lf",&a[i]);sum+=a[i];}sum=sum/(double)(m);l=0;r=sum;while(r-l>1e-10){mid=(l+r)/2;j=0;   for(int i=0;i<n;i++)   {j+=(int)(a[i]/mid);   }   if(j>=m){l=mid;}   else r=mid;}printf("%.2f\n",r=(int)(r*100)/100.0);}  return 0;}


0 0