最大化平均值

  题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值

  这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最大的平均值是w,那么题目就是问存不存在∑a/b>=w,我们把这条式子变形

      ∑a-w∑b>=0

  那么这一题就变成了寻找k个最大的a-w*b,使∑a-w∑b>=0成立

  

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <functional>
 4
 5 using namespace std;
 6
 7 static double mid, y[1001];
 8 struct _set
 9 {
10     int a,b;
11 }nums[1001];
12
13 bool judge(const int,const int);
14
15 int main(void)
16 {
17     int n, k, t;
18     double lb, rb;
19
20     while (~scanf("%d%d", &n, &k))
21     {
22         if (n == 0 && k == 0)
23             break;
24         for (int i = 0; i < n; i++)
25             scanf("%d", &nums[i].a);
26         for (int i = 0; i < n; i++)
27             scanf("%d", &nums[i].b);
28         lb = 0; rb = 1.00, t = 100;
29
30         while (t--)
31         {
32             mid = (lb + rb) / 2;
33             if (judge(k, n)) lb = mid;
34             else rb = mid;
35         }
36         printf("%d\n", int(100 * rb + 0.5));
37     }
38
39     return 0;
40 }
41
42 bool judge(const int k,const int n)
43 {
44     double sum = 0;
45
46     for (int i = 0; i < n; i++)
47         y[i] = nums[i].a - nums[i].b*mid;//把∑a/b>=w移项
48     sort(y, y + n);
49
50     for (int i = 0; i < n - k; i++)
51         sum += y[n - i - 1];//要选择最大的k个,而不是最小的k个
52     return sum > 0;
53 }

  

转载于:https://www.cnblogs.com/Philip-Tell-Truth/p/5139400.html

Divide and conquer:Dropping tests(POJ 2976)相关推荐

  1. 二分+01分数规划+最大化平均值 Dropping tests POJ - 2976

    题意: 给你若n个分数,分子a[i]a[i]a[i],分母b[i]b[i]b[i],使满足公式100⋅∑i=1nai∑i=1nbi100\cdot\tfrac{\sum_{i=1}^{n} a_{i} ...

  2. Divide and conquer:K Best(POJ 3111)

     挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa 1 #inc ...

  3. Dropping tests

    题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS   Memory Limit: 65536K Total S ...

  4. Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】

    4145:放弃考试 总时间限制: 1000ms 内存限制: 65536kB 描述 在一门课程中,一共有n场考试.假如你在i场考试中可以答对bi道题中的ai道,那么你的累计平均分定义为:100·Σai/ ...

  5. 分治策略Divide and Conquer

    在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",通常是递归算法,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最 ...

  6. INF421 - Amphi 2 Divide and Conquer

    INF421 - Amphi 2 Divide and Conquer 0.Quizz回顾 在数组中同时寻找最大和最小元素 Big-Oh Notation (Landau Symbols) 1. In ...

  7. 分治法 Divide and Conquer思想及实际应用

    分治思想 Divide and Conquer,即为分治法,基于分支递归的一种解决问题的思想方法. 分治分治,"分而治之"的意思,就是把一个复杂的原问题分成一个或多个相同子问题,而 ...

  8. 【POJ - 2976】【ZOJ - 3068】【SCU - 2992】Dropping tests (01分数规划)

    题干: In a certain course, you take n tests. If you get ai out of bi questions correct on test i, your ...

  9. POJ 2976 Dropping Tests

    http://poj.org/problem?id=2976 题目大意:给定n个二元组(a,b),扔掉k个二元组,使得剩下的   最大. 这两天一直在搞分数规划,有了前两道题(3621.2728),这 ...

最新文章

  1. python写文件读文件-Python 读写文件和file对象的方法(推荐)
  2. Software Testing Homework03:
  3. hdu 2473(并查集+删除操作)
  4. c++矩阵作为函数输入变量_C++实现矩阵乘法
  5. word List40
  6. Java常用设计模式————单例模式
  7. Jmeter3.1官方自带的HTML图形测试报告 + 汉化
  8. 客户端验证的极品--jQuery.validator
  9. 网络之路——交换机基础篇
  10. Vulkan入门(一)-环境配置.md
  11. 驱动加载工具 DriverLoader 1.0
  12. redis在php下面的命令大全
  13. pandas安装报错
  14. 小程序父子组件间传值(微信/支付宝/钉钉)
  15. GoF 23种设计模式
  16. python语言后缀_在Python语言中,可以作为源文件后缀名的是
  17. 救命啊!还是讨厌的中文问题
  18. php去除首尾符号,PHP如何去除头尾字符
  19. testNG接口自动化测试干货分享
  20. 让docsify-katex支持化学公式mhchem扩展

热门文章

  1. centos7下docker启动失败解决
  2. 电脑4次连续故障音_格力空调电子膨胀阀故障判定与“E6”处理方法
  3. android开发技术探索,《android开发艺术探索》读书笔记(十三)--综合技术(示例代码)...
  4. python巩固函数和模块_Python学习教程6:函数,模块和类的使用
  5. JavaExcel工具类(兼容xls和xlsx)
  6. Java毕业设计--健康推广管理系统项目实战【Springboot+mybatis+layui等实现】
  7. 斑能不能彻底去掉_淡妆能不能只用洗面奶卸掉?
  8. python用筛选法求解小于n的所有素数_用筛选法求解n以内的所有素数
  9. cli3解决 ie11语法错误 vue_【VUE3.0】它来了,2020年09月18日,Vue.js 3.0 正式发布,但是........
  10. Redis数据库的连接