您的位置:首页 > 其它

POJ 2976 (最大化平均值)

2017-04-16 18:49 417 查看
题意:

给出n个题的分数,给定n个二元组(a,b),删除k个二元组,

使得剩下的a元素之和与b元素之和的比率最大(比率最后乘100输出)

though:

a/b = max(m),可以化简为a-m*b ,当a/b最大的时候a-m*b <= 0,所以

二分m。找到精度足够小的解。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int MAXN = 1005;
double eps = 1.0e-7;

int n,m;
double a[MAXN],b[MAXN];

int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m) != EOF) {
if(n == 0 && m == 0)
break;
for(int i = 0;i < n; i++)
scanf("%lf",&a[i]);
for(int j = 0;j < n; j++)
scanf("%lf",&b[j]);
double L = 0,R = 1.0,mid;
while (R - L > eps) {
mid = (R+L)/2;
double temp[MAXN];
for(int i = 0;i < n; i++)
temp[i] = a[i] - mid*b[i];
sort(temp,temp+n);
double sum = 0;
for(int i = m;i < n; i++)
sum += temp[i];
if(sum > 0)
L = mid;
else
R = mid;
}
printf("%.f\n",mid*100);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  poj 最大化平均值