• 问题 L: Yougth的最大化


    题目描述

    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 /*解题思路:
     2  
     3 这道题目是一道0-1分数规划求最优值。方法是一个二分搜索+贪心的题目。
     4 
     5 出这道题目就是告诉大家二分不仅可以查找,还可以搜索一个更优值。
     6 
     7 要使得单位重量的价值最大,则其最大不超过单个中最大的单位重量的价值,最小当然不小于0.
     8 
     9 那么我们就在这0--最大单位重量的价值中间找一个值ans,使得ans为满足题目条件的最大值。
    10 如果满足条件,则可以找更大的。设置一个条件。既二分搜索、从n个物品中找k个使得k个的价值和/质量和>=ans
    11 为了使得ans尽可能的大,那么这里就要贪心选择。*/
    12 
    13 #include<cstdio>
    14 #include<algorithm>
    15 
    16 using namespace std;
    17 const int N = 11000;
    18 int w[N], v[N];
    19 double y[N];
    20 int n, k;
    21 int chack(double x) {
    22     for(int i = 0; i < n; i++) {
    23         y[i] = v[i] - x * w[i];
    24     }
    25     sort(y, y + n);
    26     double sum = 0;
    27     for(int j = 0; j < k; j ++) {
    28         sum += y[n - j - 1];
    29     }
    30     return sum >= 0;
    31 }
    32 
    33 double reaerch(double enf) {
    34     double l = 0, r = enf, mid;
    35     for(int i = 0; i < 100; i++) {
    36         mid = (l + r) / 2;
    37         if(chack(mid))
    38             l = mid;
    39         else
    40             r = mid;
    41     }
    42     return l;
    43 }
    44 
    45 int main( ) {
    46     while(scanf("%d%d", &n, &k) != EOF) {
    47         double ma = 0;
    48         for(int i = 0; i < n; i ++) {
    49             scanf("%d%d", &w[i], &v[i]);
    50             double cmp = v[i] / w[i];
    51             if(cmp > ma)
    52                 ma = cmp;
    53         }
    54         printf("%.2lf
    ", reaerch(ma));
    55     }
    56     return 0;
    57 }
    View Code
  • 相关阅读:
    模拟——1031D
    线性dp——cf1032
    莫比乌斯反演——专题练习
    数论,质因数,gcd——cf1033D 好题!
    连通图,set——cf1037E
    线段树动态开点——cf1045G
    跳表上线性dp——1150D 好题!
    高斯消元求主元——模意义下的消元cf1155E
    汽车长期停放,毁车没商量?
    驾校都是错的?这才是日常驾驶正确的换挡方式
  • 原文地址:https://www.cnblogs.com/tong69/p/5802157.html
Copyright © 2020-2023  润新知