zoukankan      html  css  js  c++  java
  • GPA

    题目描述

    Kanade selected n courses in the university. The academic credit of the i-th course is s[i] and the score of the i-th course is c[i].

    At the university where she attended, the final score of her is 

     

    Now she can delete at most k courses and she want to know what the highest final score that can ge

     

     

    输入描述:

    The first line has two positive integers n,k

    The second line has n positive integers s[i]

    The third line has n positive integers c[i]

    输出描述:

    Output the highest final score, your answer is correct if and only if the absolute error with the standard answer is no more than 10
    -5
    示例1

    输入

    复制
    3 1
    1 2 3
    3 2 1

    输出

    复制
    2.33333333333

    说明

    Delete the third course and the final score is 
    frac{2*2+3*1}{2+1}=frac{7}{3}

    备注:

    1≤ n≤ 10
    5


    0≤ k < n

    1≤ s[i],c[i] ≤ 103

    题解:

    http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html

    分数规划,这个式子很容易变换为∑s[i]c[i]-R*∑s[i]=0提取公因式∑s[i]-(c[i]*R)>=0,

    其实代码很短,也很好理解,但是为什么这么做并不容易想明白。

    #include <bits/stdc++.h>
    using namespace std;
    const int MAXN=1010;
    const double Exp=1e-8;
    int s[MAXN],c[MAXN],a[MAXN];
    double res[MAXN];
    int n,k;
    bool judge(double x)
    {
        for (int i = 1; i <=n ; ++i) {
            res[i]=s[i]*(c[i]-x);
        }
        sort(res+1,res+n+1);
        double ans=0;
        for (int i = k+1; i <=n ; ++i) {
            ans+=res[i];
        }
        return ans>=0;
    }
    int main()
    {
        scanf("%d%d",&n,&k);
        for (int i = 1; i <=n ; ++i) {
            scanf("%d",&s[i]);
        }
        for (int i = 1; i <=n ; ++i) {
            scanf("%d",&c[i]);
        }
        double l=0,r=1e6;
        while(Exp<r-l){
            double mid=(l+r)*0.5;
            if(judge(mid)) l=mid;
            else
                r=mid;
        }
        printf("%.8lf
    ",r);
        return 0;
    }
    

      

  • 相关阅读:
    括号匹配(有点复杂,因为它讲得详细)
    A+B/A*B求A和B
    构造哈夫曼树
    用栈实现进制转换
    实现二叉树各种基本运算的算法
    十六进制加法
    求二叉树中叶子结点到根结点的路径
    SilverLight4常见问题及解决办法
    Silverlight中自定义控件
    Silverlight发布时的优化工作
  • 原文地址:https://www.cnblogs.com/-xiangyang/p/9417731.html
Copyright © 2011-2022 走看看