题目描述:

有n个物品的重量和价值分别为Wi和Vi。从中选出k个物品使得单位重量的价值最大。

例如:
n=3
k=2
(w,v)={(2,2) , (5,3) , (2,1) }

输出应为0.75

分析:
一般我们最先想到的就是把物品按照单位价值进行排序,从大到小贪心的进行选取。但是这种方法对于样例的输出应该为5/7=0.714,所以这个方法是不行的。

这个问题应该使用二分搜索法解决,定义:
C(x),表示,可以选择的单位重量的价值不小于x

我们要求满足C(x)的最大的x,

单位重量的价值为:Vi / Wi

Vi / Wi>=x.

即C(x)=(Vi -x Wi),从大到小排序中的钱k个的和不小于0.

代码:

#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int n,k;
int w[10009],v[10009];
double y[10009];
bool cmp(double a,double b)
{return a>b;
}
bool C(double x)
{for(int i=0;i<n;i++)y[i]=v[i]-x*w[i];sort(y,y+n,cmp);double sum=0;for(int i=0;i<k;i++)sum+=y[i];return sum>=0;
}void solve()
{double lb=0,ub=0x3f3f3f3f;for(int i=0;i<100;i++){double mid=(lb+ub)/2;if(C(mid)) lb=mid;elseub=mid;}printf("%.2lf\n",ub);
}
int main()
{scanf("%d%d",&n,&k);for(int i=0;i<n;i++)scanf("%d%d",&w[i],&v[i]);solve();return 0;
}

转载于:https://www.cnblogs.com/cmmdc/p/7207895.html

最大化平均值 (二分搜索法)相关推荐

  1. POJ 2976 Dropping tests【二分 最大化平均值】

    题意:定义最大平均分为 (a1+a2+a3+---+an)/(b1+b2+---+bn),求任意去除k场考试的最大平均成绩 和挑战程序设计上面的最大化平均值的例子一样 判断是否存在x满足条件 (a1+ ...

  2. 二分搜索法(思维拓展)

    定义: 二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法. 简单用途: 从有序数组中查找某个值,这是一开始学习二分搜索的经典例子. 拓展用途: 用于求最优解的问题,如:满足某个条件 ...

  3. K BEST(最大化平均值)

    K BEST(最大化平均值) Demy has n jewels. Each of her jewels has some value vi and weight wi.Since her husba ...

  4. php二分搜索,php如何实现二分搜索法

    在php中实现二分搜索法的方法:首先,取数组中的一个值作为边界:然后递归搜索直到最后,代码是[if ($ low 本教程的操作环境:windows7系统,PHP 5.6版,DELL G3电脑.此方法适 ...

  5. 二分搜索法 C++代码实现 恋上数据结构笔记

    复习梗概 二分搜索法的end有两种定义方式,两种分别是什么含义? 二分搜索法end的两种定义方式分别影响了什么?(结束条件,更新指针) 二分搜索法的结束条件和更新指针两步代码? 二分搜索法的整体流程? ...

  6. 经典算法之左边界二分查找法(俗称左边界二分搜索法)

    经典算法之左边界二分查找法(俗称左边界二分搜索法) 文章目录 经典算法之左边界二分查找法(俗称左边界二分搜索法) 前言 一.什么左边界二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的 ...

  7. 经典算法之右边界二分查找法(俗称基本右边界二分搜索法)

    经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 经典算法之右边界二分查找法(俗称基本右边界二分搜索法) 前言 一.什 ...

  8. 经典算法之二分查找法(俗称基本二分搜索法)

    经典算法之二分查找法(俗称二分搜索法) 文章目录 经典算法之二分查找法(俗称二分搜索法) 前言 一.什么是二分查找法? 二.代码实现 总结 前言 就算法而言,我们主要学习的是数学+思维+逻辑+数据结构 ...

  9. 常见算法讲解及实例——二分搜索法

    二分搜索法 简介 步骤 简介 二分搜索法,是一种在有序数组中查找某一特定元素的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束:如果某一特定元素大于或者小于中间元 ...

最新文章

  1. mysql创建主键索引的关键字使用_mysql字段、主键、索引等的创建与修改命令
  2. Internet概念与TCP/ IP分层模型
  3. 像程序员一样思考_如何像程序员一样思考-解决问题的经验教训
  4. python 2.7 error: Microsoft Visual C++ 9.0 is required
  5. Linux C编程一些优秀的博客链接
  6. python如何设置api接口_python如何使用api接口
  7. coreldraw快速撤回_CorelDRAW快捷键:常用快捷键(1)
  8. 计算机上有哪些操作系统?
  9. .mat转.tif 用于arcgis裁剪遥感图像
  10. threejs 贴图动画总结
  11. java计算机毕业设计乐多多宠物店网站源代码+数据库+系统+lw文档
  12. 博弈论——Anti-SG 游戏 结论
  13. docker- health check
  14. UVA 11549 calcular conundrum 计算机老谜题
  15. 实时股票数据接口 ZT
  16. matlab求解一维波动方程,一维波动方程matlab
  17. SQLAlchemy的CRUD操作
  18. linux关闭mysql失败_Linux系统mysql访问失败该怎样处理
  19. 儿童睡眠慢波的起源、同步和传播
  20. Tableau 消费客户分析(二)分群规模和消费

热门文章

  1. 【附代码】如何在私有链上编写、部署与以太坊进行交互的智能合约
  2. 区块链学堂(1):区块链引子
  3. (原创)Android6.0亮屏流程分析
  4. Deep learning:一(基础知识_1)
  5. GAN for NLP (论文笔记及解读
  6. php 一个简单正则表达式,PHP中正则表达式回顾(3)--编写一个简单的正则表达式工具类...
  7. python编写函数_python函数式编程
  8. 多项式的ln、exp、快速幂和开根学习小记
  9. matlab中sum函数
  10. Bayesian Networks