• nyist 914


    #include <stdio.h>
    #include <math.h>
    #include <algorithm>
    using namespace std;

    int w[10005],v[10005];
    int n,k;
    double maxu,c[10005];
    const double ex=0.000001;

    bool Check(double x){//若是选定当前单位价值的结果是可以或者不可以

    for(int i=0;i<n;i++)
    c[i]=v[i]-x*w[i];
    sort(c,c+n);
    double sum=0;
    for(int i=0;i<k;i++)//判定当前单位价值时,是不是比较好的选择,>=0为好,则可能有更优的情况
    sum+=c[n-1-i];
    return sum>=0;
    }

    double ans(double x){

    double fir=0,las=x,mid;
    while(fabs(fir-las)>ex){
    mid=(fir+las)/2.0;
    if(Check(mid))//若是当前单位价值都满足,则最终结果不会低于当前单位价值
    fir=mid;
    else
    las=mid;
    }
    return fir;
    }

    int main(){

    while(scanf("%d%d",&n,&k)==2){
    maxu=-1;
    for(int i=0;i<n;i++){
    scanf("%d%d",&w[i],&v[i]);
    if(v[i]*1.0/w[i]>maxu)//确定单位价值的上限值
    maxu=v[i]*1.0/w[i];
    }
    printf("%.2lf ",ans(maxu));
    }
    return 0;
    }

    /*

    二分确定单位价值的范围,贪心用来确定是否会出现更优解

    */

  • 相关阅读:
    app测试点-1
    毕业5年的感悟
    关于游戏外挂
    python-unittest单元测试框架
    python-requests
    http简介
    python基础-发邮件smtp
    python-加密
    4 Python 日期和时间
    5 Python 数据类型—数字
  • 原文地址:https://www.cnblogs.com/huaixiaohai2015/p/5184729.html
Copyright © 2020-2023  润新知