• 最大化平均值


    ///4.最大化平均值
    /**
        Q:有n个价值和重量为vi、wi的物品,从中挑选k个使单位重量的价值最大
    
        A:
        此题不能直接用贪心法:直接按物品的单位价值排序,然后依次取k个;
        我们要求的最大值是,价值之和/重量之和;而上面所说是单位价值之和。
        ------------------------------------------变形贪心
        二分搜索法模型:
        条件C(x):可以挑选使得单位重量的物品价值不小于x->求满足条件的最大x->如何判断C(x)
        价值和/重量和>=x
        价值和-重量和*x>=0
        和(价值-重量*x)>=0
        可以对(价值-重量*x)的值进行贪心的选取,选取最大的k个 和>=0
    
    */
    #include "iostream"
    #include "cstdio"
    #include "algorithm"
    using namespace std;
    #define MAX 100010
    #define INF 0x3f3f3f3f
    int N,K;
    int w[MAX],v[MAX];
    double y[MAX];
    
    bool C(double x)
    {
        for(int i=0;i<N;i++)
            y[i]=v[i]-w[i]*x;
        sort(y,y+N);
    
        ///取k个
        int t=N-1-K;
        double sum=0;
        for(int i=N-1;i>t;i--)
        {
            sum+=y[i];
        }
        return sum>=0;
    }
    void solve()
    {
        double lb=0,ub=INF,mid;
        for(int i=0;i<100;i++)
        {
            mid=(lb+ub)/2;
            if(C(mid))
                lb=mid;
            else
                ub=mid;
        }
        printf("%.2f
    ",ub);
    }
    int main()
    {
        while(~scanf("%d%d",&N,&K))
        {
            for(int i=0;i<N;i++)
                scanf("%d%d",&w[i],&v[i]);
            solve();
        }
        return 0;
    }
    /**
    3 2
    2 2
    5 3
    2 1
    
    0.75
    
    */
  • 相关阅读:
    loaded some nib but the view outlet was not set
    指标评比
    IOS DEVELOP FOR DUMMIES
    软件测试题二
    javascript select
    DOM节点类型详解
    mysql操作
    UVA 10055
    solutions for 'No Suitable Driver Found For Jdbc'
    解决git中文乱码问题
  • 原文地址:https://www.cnblogs.com/kimsimple/p/7137438.html
Copyright © 2020-2023  润新知