最大化平均值

时间:2021-02-19 23:43:14   收藏:0   阅读:30

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

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int INF = 9999999;
const int n = 3, k = 2;
double v[n] = { 2,3,1 }, w[n] = { 2,5,2 };
bool solve(double x)
{
    double y[n];
    for (int i = 0; i < n; i++)
    {
        y[i] = v[i] - x * w[i];
    }
    sort(y, y + n);
    double sum = 0;
    for (int i = n - 1; i >=n-k; i--)
    {
        sum += y[i];
    }
    return sum >= 0;
}
int main(void)
{
    double lb = 0, ub = INF,mid;
    for (int i = 0; i < 100; i++)
    {
        mid = (lb + ub) / 2;
        if (solve(mid))lb = mid;
        else ub = mid;
    }
    printf("%.2lf", lb);
    return 0;
}

 

原文:https://www.cnblogs.com/loliconsk/p/14418600.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!