zoukankan      html  css  js  c++  java
  • 最大化平均值

    题目:有n个重量和价值分别为w(i)和v(i)的物品,从中选出k个物品是的单位重量的价值最大。

    输入:n=3 k=2
    (w,v)={(2,2),(5,3),(2,1)}
    输出:0.75(选择0和2)
    一般都会想直接按单位重量的价值排序,然后进行贪心,但是发现这种方法样例都不对!!!还是得好好分析一番啊。

    题解

    #include <iostream>
    
    using namespace std;
    int n,k;
    const int maxn=1000;
    int w[maxn],v[maxn];
    int y[maxn];
    bool check(int x)
    {
        for(int i=0;i<n;i++)
           y[i]=v[i]-x*w[i];
    
        sort(y,y+n,greater<int>);
            double sum=0; 
        for(int i=0;i<k;i++)
        {
            sum+=y[i];
        }
        return sum>=0;
    }
    void solve()
    {
        double lb=0,ub=99999999;
        for(int i=0;i<100;i++)
        {
            double mid=(lb+ub)/2;
            if(check(mid))
                lb=mid;
            else ub=mid;
        }
        printf("%.2f
    ",ub);
    }
    
    
  • 相关阅读:
    8.8总结
    8.4总结
    8.3总结
    题目分享H 二代目
    题目分享G 二代目
    题目分享E 二代目
    题目分享F 二代目
    题目分享D 二代目
    题目分享C 二代目
    题目分享Y
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387409.html
Copyright © 2011-2022 走看看