poj2976 Dropping tests 二分

来源:互联网 发布:北控软件 怎么样 编辑:程序博客网 时间:2024/06/03 12:28

题意:已知n场考试,每场考试的共b[i]道题,答对a[i]道题,从这n场考试中删去K场,使最大,问该值最大为多少

最大化最小值问题 同poj3111 http://blog.csdn.net/dlutjwh/article/details/54318672

#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int a[1005],b[1005],n,k;double c[1005];bool C(double x){for(int i=0;i<n;i++)    c[i]=a[i]-x*b[i];sort(c,c+n);double sum=0;for(int i=0;i<n-k;i++)    sum+=c[n-i-1];return sum>=0;}int main(){while((cin>>n>>k)&&(n!=0||k!=0)){    for(int i=0;i<n;i++)        cin>>a[i];    for(int i=0;i<n;i++){        cin>>b[i];        }        double lb=0,ub=1.1;        for(int i=0;i<100;i++){            double mid=(lb+ub)/2;            if(C(mid))  lb=mid;            else ub=mid;        }        ub=ub*100;        int z=ub;        if(double(ub-z)<0.5)            cout<<z<<endl;        else cout<<z+1<<endl;}}



0 0