最大化平均值_有n个物品的重量和价值分别是wi和vi。从中选出k个物品使得单位重量的价值最大

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#define INF 0x3f3f3f
using namespace std;
int n,k;
int v[20010],w[20010];
double y[20010];
bool check(double x)
{

    for(int i=0;i<n;i++)
    {
        //y[i]=0;
        y[i]=v[i]-x*w[i];
    }
    sort(y,y+n);
    double sum=0;
    for(int i=0;i<k;i++)
    {
        sum+=y[n-i-1];//这里不要搞错了
    }
    if(sum>=0)return true;
    else return false;
}
int main()

{

    cin>>n>>k;
    for(int i=0;i<n;i++)
    {
        cin>>w[i]>>v[i];
    }
    double  l=0,r=INF;
    for(int i=0;i<100;i++)
    {
        double mid=(l+r)/2;
        if(check(mid))l=mid;
        else r=mid;
    }
    printf("%.2f\n",r);
}

  

posted @ 2018-05-08 17:21  xianbeigg  阅读(517)  评论(0编辑  收藏  举报