题目:
准确率:n场考试中分别答对a_i题,总题数分别为b_i,允许去掉k场考试,求能达到的最高准确率。
POJ 2976 Dropping tests 题解 《挑战程序设计竞赛》
[Algorithm]01分数规划——Update:2012年7月27日
// 条件C(x):=可以选择使得单位重量的价值不小于x
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int Max_n=1e4+10;
int n,k;
int w[Max_n],v[Max_n];
double y[Max_n];
bool C(double x){
for(int i=0;i<n;i++)
y[i]=v[i]-x*w[i];
sort(y,y+n);
double sum=0;
for(int i=k;i<n;i++)
sum+=y[i];
return sum>=0;
}
int main()
{
while(~scanf("%d%d",&n,&k)&&n+k){
double Max=0;
for(int i=0;i<n;i++)scanf("%d",&v[i]);
for(int i=0;i<n;i++){
scanf("%d",&w[i]);
if(v[i]*1.0/w[i]>Max)
Max=v[i]*1.0/w[i];
}
double l=0,r=Max,mid;
while(r-l>1e-6){
mid=(l+r)/2;
if(C(mid))l=mid;
else r=mid;
}
printf("%.0f\n",l*100);
}
return 0;
}