zoukankan      html  css  js  c++  java
  • nyoj--914--Yougth的最大化(二分查找)

    Yougth的最大化

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
    描述

    Yougth现在有n个物品的重量和价值分别是Wi和Vi,你能帮他从中选出k个物品使得单位重量的价值最大吗?

    输入
    有多组测试数据
    每组测试数据第一行有两个数n和k,接下来一行有n个数Wi和Vi。
    (1<=k=n<=10000) (1<=Wi,Vi<=1000000)
    输出
    输出使得单位价值的最大值。(保留两位小数)
    样例输入
    3 2
    2 2
    5 3
    2 1
    样例输出
    0.75
    来源
    Yougth
    上传者

    TC_杨闯亮



    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    #define MAX 10010
    double b[MAX];
    int n,k;
    struct node
    {
    	int w,v;
    }q[MAX];
    int judge(double x)
    {
    	for(int i=0;i<n;i++)
    	b[i]=q[i].v-x*q[i].w;
    	//这一步比较巧妙,假设当前这个就是平均的价值,然后看每一个的差价 
    	sort(b,b+n);
    	double sum=0;
    	for(int i=0;i<k;i++)
    	sum+=b[n-i-1];
    	return sum>=0;
    }
    int main()
    {
    	while(scanf("%d%d",&n,&k)!=EOF)
    	{
    		for(int i=0;i<n;i++)
    		scanf("%d%d",&q[i].w,&q[i].v);
    		double l=0,r=10000000,mid;
    		while(r-l>1e-10)
    		{
    			mid=(l+r)/2;
    			if(judge(mid))
    			l=mid;
    			else
    			r=mid;
    		}
    		printf("%.2f
    ",l);
    	}
    	return 0;
    }



  • 相关阅读:
    正则表达式复习 (?<=) (?=)
    HTML 30分钟入门教程
    C# 多线程详解
    C# List
    C# 枚举
    C# 线程数
    C# 泛型2
    C# 泛型
    C# 结构体
    不用Google Adsense的84个赚钱方法
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273731.html
Copyright © 2011-2022 走看看