• poj3111 K Best


    思路:

    二分最大化平均值。

    迭代次数太多会超时。

    实现:

     1 #include <cstdio>
     2 #include <algorithm>
     3 using namespace std;
     4 const int MAXN = 100005;
     5 const int INF = 0x3f3f3f3f;
     6 int v[MAXN], w[MAXN], ans[MAXN], n, k;
     7 struct node
     8 {
     9     int id;
    10     double x;
    11 };
    12 node buf[MAXN];
    13 bool cmp(const node & a, const node & b)
    14 {
    15     return a.x < b.x;
    16 }
    17 bool check(double x)
    18 {
    19     for (int i = 0; i < n; i++) { buf[i].x = v[i] - x * w[i]; buf[i].id = i; }
    20     sort(buf, buf + n, cmp);
    21     double sum = 0;
    22     for (int i = n - 1; i > n - 1 - k; i--) sum += buf[i].x;
    23     if (sum >= 0)
    24     {
    25         for (int i = n - 1; i > n - 1 - k; i--) ans[n - 1 - i] = buf[i].id; return true;
    26     }
    27     return false;
    28 }
    29 int main()
    30 {
    31     scanf("%d %d", &n, &k);
    32     for (int i = 0; i < n; i++) scanf("%d %d", &v[i], &w[i]);
    33     double l = 0, r = INF;
    34     for (int i = 0; i < 50; i++)
    35     {
    36         double m = (l + r) / 2;
    37         if (check(m)) l = m;
    38         else r = m;
    39     }
    40     for (int i = 0; i < k; i++) printf("%d ", ans[i] + 1);
    41     return 0;
    42 }
  • 相关阅读:
    Web中Servlet简单总结
    JavaSE进阶的面试题
    多线程简单总结
    Java基础集合简单总结
    内部类和Lambda
    多态
    接口
    继承
    uni-app 中uCharts
    vue 组件传值
  • 原文地址:https://www.cnblogs.com/wangyiming/p/8359764.html
Copyright © 2020-2023  润新知