Divide and conquer:Dropping tests(POJ 2976)
最大化平均值
题目大意:给定你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)相关推荐
- 二分+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} ...
- Divide and conquer:K Best(POJ 3111)
挑选最美的珠宝 题目大意:挑选k个珠宝使得∑a/∑b最大,输出组合数 最大化平均值的标准题型,二分法就好了,一定要注意范围(10e-7),如果是10e-8就会tle,10e-6就是wa 1 #inc ...
- Dropping tests
题目链接:http://poj.org/problem?id=2976 Dropping tests Time Limit: 1000MS Memory Limit: 65536K Total S ...
- Bailian4145 放弃考试 POJ2976 ZOJ3068 Dropping tests【二分法+01分数规划】
4145:放弃考试 总时间限制: 1000ms 内存限制: 65536kB 描述 在一门课程中,一共有n场考试.假如你在i场考试中可以答对bi道题中的ai道,那么你的累计平均分定义为:100·Σai/ ...
- 分治策略Divide and Conquer
在计算机科学中,分治法是一种很重要的算法.字面上的解释是"分而治之",通常是递归算法,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题--直到最 ...
- INF421 - Amphi 2 Divide and Conquer
INF421 - Amphi 2 Divide and Conquer 0.Quizz回顾 在数组中同时寻找最大和最小元素 Big-Oh Notation (Landau Symbols) 1. In ...
- 分治法 Divide and Conquer思想及实际应用
分治思想 Divide and Conquer,即为分治法,基于分支递归的一种解决问题的思想方法. 分治分治,"分而治之"的意思,就是把一个复杂的原问题分成一个或多个相同子问题,而 ...
- 【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 ...
- POJ 2976 Dropping Tests
http://poj.org/problem?id=2976 题目大意:给定n个二元组(a,b),扔掉k个二元组,使得剩下的 最大. 这两天一直在搞分数规划,有了前两道题(3621.2728),这 ...
最新文章
- python写文件读文件-Python 读写文件和file对象的方法(推荐)
- Software Testing Homework03:
- hdu 2473(并查集+删除操作)
- c++矩阵作为函数输入变量_C++实现矩阵乘法
- word List40
- Java常用设计模式————单例模式
- Jmeter3.1官方自带的HTML图形测试报告 + 汉化
- 客户端验证的极品--jQuery.validator
- 网络之路——交换机基础篇
- Vulkan入门(一)-环境配置.md
- 驱动加载工具 DriverLoader 1.0
- redis在php下面的命令大全
- pandas安装报错
- 小程序父子组件间传值(微信/支付宝/钉钉)
- GoF 23种设计模式
- python语言后缀_在Python语言中,可以作为源文件后缀名的是
- 救命啊!还是讨厌的中文问题
- php去除首尾符号,PHP如何去除头尾字符
- testNG接口自动化测试干货分享
- 让docsify-katex支持化学公式mhchem扩展
热门文章
- centos7下docker启动失败解决
- 电脑4次连续故障音_格力空调电子膨胀阀故障判定与“E6”处理方法
- android开发技术探索,《android开发艺术探索》读书笔记(十三)--综合技术(示例代码)...
- python巩固函数和模块_Python学习教程6:函数,模块和类的使用
- JavaExcel工具类(兼容xls和xlsx)
- Java毕业设计--健康推广管理系统项目实战【Springboot+mybatis+layui等实现】
- 斑能不能彻底去掉_淡妆能不能只用洗面奶卸掉?
- python用筛选法求解小于n的所有素数_用筛选法求解n以内的所有素数
- cli3解决 ie11语法错误 vue_【VUE3.0】它来了,2020年09月18日,Vue.js 3.0 正式发布,但是........
- Redis数据库的连接