zoukankan      html  css  js  c++  java
  • POJ2976Dropping tests(分数规划)

    传送门

    题目大意:n个二元组a[i],b[i],去掉k个,求sigma a[i]/ sigma b[i]的最大值

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #define N 1009
    #define LL long long
    using namespace std;
    
    LL n,k;
    
    LL a[N],b[N];
    
    double c[N];
    
    inline int read()
    {
        register LL x=0,f=1;register char ch=getchar();
        while(ch<'0'||ch>'9') if(ch=='-') f=-1,ch=getchar();
        while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
        return x*f;
    } 
    
    int main()
    {
        while(1)
        {
            n=read();k=read();
            if(!n&&!k) break;
            for(int i=1;i<=n;i++) a[i]=read();
            for(int i=1;i<=n;i++) b[i]=read();
            double l=0,r=100;
            while(r-l>1e-5)
            {
                double mid=(l+r)/2,p=0;
                for(int i=1;i<=n;i++) c[i]=a[i]-mid*b[i];
                sort(c+1,c+n+1);
                for(int i=n;i>=k+1;i--) p=p+c[i];
                if(p>=0) l=mid;
                else r=mid;
            }
            printf("%.0f
    ",l*100);
        }
        return 0;
    }
  • 相关阅读:
    linux命令大全
    IP协议
    TCP、IP、ARP协议之间的工作关系
    程序出现问题后
    HTTP(超文本传输协议)
    多线程
    syslog.conf文件
    logger命令
    gdb
    二、数据的存储结构
  • 原文地址:https://www.cnblogs.com/zzyh/p/11986543.html
Copyright © 2011-2022 走看看