码迷,mamicode.com
首页 > 其他好文 > 详细

POJ_1064_Cable_master

时间:2016-04-22 23:59:25      阅读:434      评论:0      收藏:0      [点我收藏+]

标签:

描述


http://poj.org/problem?id=1064

分析


二分.

条件C(x)=可以得到k条长度为x的绳子,求满足C(x)的x的最小值.求解这样的最大化或最小化问题:"假定一个解并判断是否可行".(普通二分查找值的条件C(x)=v).

注意:

1.关于精度,这个貌似不太好估算,所以就循环100次咯.

 

技术分享
 1 #include<cstdio>
 2 #include<algorithm>
 3 using std :: max;
 4 
 5 const int maxn=10005;
 6 int n,k;
 7 double maxl,l[maxn];
 8 
 9 bool judge(double x)
10 {
11     int sum=0;
12     for(int i=1;i<=n;i++)
13     {
14         sum+=(int)(l[i]/x);
15     }
16     return sum>=k;
17 }
18 
19 double bsearch(double x,double y)
20 {
21     for(int i=0;i<300;i++)
22     {
23         double m=x+(y-x)/2;
24         if(judge(m)) x=m;
25         else y=m;
26     }
27     return x;
28 }
29 
30 void init()
31 {
32     scanf("%d%d",&n,&k);
33     for(int i=1;i<=n;i++)
34     {
35         scanf("%lf",&l[i]);
36         maxl=max(maxl,l[i]);
37     }
38 }
39 
40 void solve()
41 {
42     printf("%.2f\n",floor(bsearch(0,maxl)*100)/100);
43 }
44 
45 int main()
46 {
47     freopen("Cable.in","r",stdin);
48     freopen("Cable.out","w",stdout);
49     init();
50     solve();
51     fclose(stdin);
52     fclose(stdout);
53     return 0;
54 }
View Code

 

 

 

 

 

POJ_1064_Cable_master

标签:

原文地址:http://www.cnblogs.com/Sunnie69/p/5423183.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!