Divide and conquer:Dropping tests(POJ 2976)
2024-08-29 16:12:40
题目大意:给定你n个分数,从中找出k个数,使∑a/∑b的最大值
这一题同样的也可以用二分法来做(用DP会超时,可见二分法是多么的实用呵!),大体上是这样子:假设最大的平均值是w,那么题目就是问存不存在∑a/b>=w,我们把这条式子变形
∑a-w∑b>=0
那么这一题就变成了寻找k个最大的a-w*b,使∑a-w∑b>=0成立
#include <iostream>
#include <algorithm>
#include <functional> using namespace std; static double mid, y[];
struct _set
{
int a,b;
}nums[]; bool judge(const int,const int); int main(void)
{
int n, k, t;
double lb, rb; while (~scanf("%d%d", &n, &k))
{
if (n == && k == )
break;
for (int i = ; i < n; i++)
scanf("%d", &nums[i].a);
for (int i = ; i < n; i++)
scanf("%d", &nums[i].b);
lb = ; rb = 1.00, t = ; while (t--)
{
mid = (lb + rb) / ;
if (judge(k, n)) lb = mid;
else rb = mid;
}
printf("%d\n", int( * rb + 0.5));
} return ;
} bool judge(const int k,const int n)
{
double sum = ; for (int i = ; i < n; i++)
y[i] = nums[i].a - nums[i].b*mid;//把∑a/b>=w移项
sort(y, y + n); for (int i = ; i < n - k; i++)
sum += y[n - i - ];//要选择最大的k个,而不是最小的k个
return sum > ;
}
最新文章
- VBA唏嘘戏——简单单元格的设定(实例)
- 必须会的SQL语句(八)数据库的完整性约束
- LevelDB系列之Log文件
- JS获取request字符串
- 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
- 安卓学习笔记--已root设备应用请求root权限
- Oracle ADDM报告生成和性能分析
- 关于DataTable 判断 列名是否存在的方法中英文符合不区分?
- Exp3 免杀原理与实践 20164320 王浩
- 实验四 CC2530平台上UART组件的TinyOS编程
- 测试miniconda,python以及机器学习包是否安装成功
- <;mvc:annotation-driven>; 中的HttpMessageConverters 的理解
- checkbox 选中的id拼接长字符串
- mysql表空间加密 keyring encryption
- samtools faidx输出的fai文件格式解析 | fasta转bed | fasta to bed
- OpenGL入门程序五:三维绘制
- 初识Docker和安装
- C# 判断程序是否已经在运行
- Java基础—集合
- javascript语言使用技巧及注意事项总结
热门文章
- SQL语句学习笔记
- 【AngularJS】—— 6基于AngularJS的过滤与排序
- OC第四节——NSDictionary和NSMutableDictionary
- MySQL数据库的事务管理
- explain mysql的type字段,索引的类型
- 关于phpcms中mysql和mysqli的区别
- 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接
- Effective Java 读书笔记之七 通用程序设计
- UnsupportedClassVersionError: Bad version number in .class file
- (原)android中的动画(二)