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;
}

浙公网安备 33010602011771号