zoukankan      html  css  js  c++  java
  • nyoj-914-Yougth的最大化

    http://acm.nyist.net/JudgeOnline/problem.php?pid=914

    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

    解题思路:二分搜索,二分答案

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 struct P{
     6     double wi;
     7     double vi;
     8     double ave;
     9 }p[10010];
    10 
    11 int n, k, i;
    12 double left, mid, right, a[10010];
    13 
    14 int cmp(const void *a, const void *b){
    15     return *(double *)a > *(double *)b ? 1 : -1;
    16 }
    17 
    18 bool check(double x){
    19     for(i = 0; i < n; i++){
    20         a[i] = p[i].vi - x * p[i].wi;
    21     }
    22     qsort(a, n, sizeof(a[0]), cmp);
    23     double sum = 0.0;
    24     for(i = 0; i < k; i++){
    25         sum += a[n - 1 - i];
    26     }
    27     return sum >= 0 ? true : false;
    28 }
    29 
    30 void solve(){
    31     while((right - left) > 1e-9){
    32         mid = (right + left) / 2.0;
    33         if(check(mid)){
    34             left = mid;
    35         }
    36         else{
    37             right = mid;
    38         }
    39     }
    40     printf("%.2lf ", left);
    41 }
    42 int main(){
    43 
    44     while(scanf("%d %d", &n, &k) != EOF){
    45         left = right = 0.0;
    46         for(i = 0; i < n; i++){
    47             scanf("%lf %lf", &p[i].wi, &p[i].vi);
    48             p[i].ave = p[i].vi / p[i].wi;
    49             right = right > p[i].ave ? right : p[i].ave;
    50         }
    51         solve();
    52     }
    53     return 0;

    54 } 

  • 相关阅读:
    ubuntu sudo 号令有效处理
    shell脚本的主笔、存储、实行
    Oracle 11gR1中细粒度访谒收集处事(4)
    Solaris效力经管工具 SMF快速入门指南(1)
    Solaris 10完成宁静Kerberos身份验证(2)
    高质量C /C编程指南第2章 程序的版式
    Solaris 10下设置EJB 3.0景遇(1)
    高质量C /C编程指南序言
    Java学习之路:不走弯路,就是捷径 www.51testing.com
    两个结构体可以直接赋值吗? 回复 "JohnsonAnother" 的问题
  • 原文地址:https://www.cnblogs.com/angle-qqs/p/4121840.html
Copyright © 2011-2022 走看看