博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大化平均值 (二分搜索法)
阅读量:5278 次
发布时间:2019-06-14

本文共 846 字,大约阅读时间需要 2 分钟。

题目描述:

有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
#include
#include
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
=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; else ub=mid; } printf("%.2lf\n",ub);}int main(){ scanf("%d%d",&n,&k); for(int i=0;i

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

你可能感兴趣的文章
正则神器
查看>>
分布式-微服务-集群的区别
查看>>
第三章 敏捷软件开发
查看>>
laravel 取sql语句
查看>>
HDU 2095 find your present (2)
查看>>
Hadoop入门(一):Hadoop伪分布安装
查看>>
svn做目录访问控制(AuthzSVNAccessFile)
查看>>
微信小程序之下拉刷新,上拉加载更多
查看>>
[uva11137]立方数之和·简单dp
查看>>
【Java】 剑指offer(58-2) 左旋转字符串
查看>>
Python List comprehension列表推导式
查看>>
字符集
查看>>
数据库设计经验
查看>>
Crossing River(1700poj)
查看>>
敏捷的最佳实践-3
查看>>
map reduce filter
查看>>
今天入住园子了
查看>>
20162319 莫礼钟 预备作业02
查看>>
数字的可视化:python画图之散点图sactter函数详解
查看>>
116. Populating Next Right Pointers in Each Node (Tree; WFS)
查看>>