poj 1064 求解最大化问题

对于二分而言,如果判断条件比较简单的话,在求解最大化或者最小化问题的时候就比较适用
但是这道题目吖的卡精度。。

#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cmath>
using namespace std;
const double inf=200005.5;// 这个最大值千万不要用define。。。 进度坑死人
int n,k;
double a[10001];
bool judge(double x)
{
    int num=0;
    for(int i=1; i<=n; i++)
    {
        num+=(int)(a[i]/x);
    }
    return num>=k;
}
int main()
{
    while(scanf("%d %d",&n,&k)!=-1)
    {
        for(int i=1; i<=n; i++) scanf("%lf",&a[i]);
        double l=0,r=inf;
        for(int i=1; i<=100; i++)// 这里是学习书上的一种操作了,多次循环来控制进度
        {
            double mid=(l+r)/2;
            if(judge(mid)) l=mid;//切多了
            else r=mid;
        }
        printf("%.2f\n",floor(r*100)/100);// 这里一定要注意要向下取整 如果向上取整的话就满足不了条件了
    }
    return 0;
}

  

posted @ 2017-04-16 19:31  猪突猛进!!!  阅读(229)  评论(0)    收藏  举报