zoukankan      html  css  js  c++  java
  • POJ-3111 K Best---二分求最大化平均值

    题目链接:

    https://cn.vjudge.net/problem/POJ-3111

    题目大意:

    卖宝救夫:Demy要卖珠宝,n件分别价值vi 重 wi,她希望保留k件使得

    最大。

    解题思路:

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 const int INF = 1e7;
     7 const int maxn = 100005;
     8 int n, m;
     9 double w[maxn], v[maxn], y[maxn];
    10 bool judge(double x)
    11 {
    12     for(int i = 1; i <= n; i++)
    13         y[i] = v[i] - x * w[i];
    14     sort(y + 1, y + n + 1);
    15 
    16     double sum = 0;
    17     for(int i = 1, j = n; i <= m; i++, j--)
    18         sum += y[j];
    19     return sum >= 0;
    20 }
    21 struct node
    22 {
    23     double x;
    24     int id;
    25     bool operator <(const node& a)const
    26     {
    27         return x > a.x;
    28     }
    29 }ans[maxn];
    30 int main()
    31 {
    32     cin >> n >> m;
    33     for(int i = 1; i <= n; i++)
    34         cin >> v[i] >> w[i];
    35     double l = 0, r = INF;
    36     for(int i = 0; i < 50; i++)
    37     {
    38         double mid = (l + r) / 2;
    39         if(judge(mid))l = mid;
    40         else r = mid;
    41     }
    42     for(int i = 1; i <= n; i++)
    43     {
    44         ans[i].id = i;
    45         ans[i].x = v[i] - l * w[i];
    46     }
    47     sort(ans + 1, ans + n + 1);
    48     printf("%d", ans[1].id);
    49     for(int i = 2; i <= m; i++)
    50     {
    51         printf(" %d", ans[i].id);
    52     }
    53     puts("");
    54     return 0;
    55 }
  • 相关阅读:
    log4j日志配置
    map和java对象的转换方法
    阿里巴巴的json使用时的一些转换方法
    HttpClient发送Post和Get请求
    IT网站导航
    python学习
    git解决冲突
    协程
    Python实现协程
    异步任务神器 和定时任务Celery
  • 原文地址:https://www.cnblogs.com/fzl194/p/8989526.html
Copyright © 2011-2022 走看看