最大化平均值

  题目大意:给定你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 > ;
}

  

最新文章

  1. VBA唏嘘戏——简单单元格的设定(实例)
  2. 必须会的SQL语句(八)数据库的完整性约束
  3. LevelDB系列之Log文件
  4. JS获取request字符串
  5. 判断pdf、word文档、图片等文件类型(格式)、大小的简便方法
  6. 安卓学习笔记--已root设备应用请求root权限
  7. Oracle ADDM报告生成和性能分析
  8. 关于DataTable 判断 列名是否存在的方法中英文符合不区分?
  9. Exp3 免杀原理与实践 20164320 王浩
  10. 实验四 CC2530平台上UART组件的TinyOS编程
  11. 测试miniconda,python以及机器学习包是否安装成功
  12. &lt;mvc:annotation-driven&gt; 中的HttpMessageConverters 的理解
  13. checkbox 选中的id拼接长字符串
  14. mysql表空间加密 keyring encryption
  15. samtools faidx输出的fai文件格式解析 | fasta转bed | fasta to bed
  16. OpenGL入门程序五:三维绘制
  17. 初识Docker和安装
  18. C# 判断程序是否已经在运行
  19. Java基础—集合
  20. javascript语言使用技巧及注意事项总结

热门文章

  1. SQL语句学习笔记
  2. 【AngularJS】—— 6基于AngularJS的过滤与排序
  3. OC第四节——NSDictionary和NSMutableDictionary
  4. MySQL数据库的事务管理
  5. explain mysql的type字段,索引的类型
  6. 关于phpcms中mysql和mysqli的区别
  7. 淘宝(阿里百川)手机客户端开发日记第十三篇 mysql的连接
  8. Effective Java 读书笔记之七 通用程序设计
  9. UnsupportedClassVersionError: Bad version number in .class file
  10. (原)android中的动画(二)