zoukankan      html  css  js  c++  java
  • 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;
    }

    /*

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

    */

  • 相关阅读:
    《程序员修炼之道:从小工到专家》阅读笔记(一)
    第十一周进度报告
    用户模板和用户场景
    第十周进度报告
    团队冲刺第十天
    团队冲刺第九天
    团队冲刺第八天
    第一阶段用户评价
    第十二周总结
    第十一周总结
  • 原文地址:https://www.cnblogs.com/huaixiaohai2015/p/5184729.html
Copyright © 2011-2022 走看看