C语言wyh的物品

题目描述

wyh学长现在手里有 n 个物品,这 n 个物品的重量和价值都告诉你,然后现在让你从中选取 k 个,问你在所有可能选取的方案中,最大的单位价值为多少(单位价值为选取的 k个物品的总价值和总重量的比值)

输入描述:

输入第一行一个整数 T(1≤T≤10)
接下来有 T组测试数据,对于每组测试数据,第一行输入两个数 n 和 k(1≤k≤n≤100000)
接下来有 n 行,每行两个是 a 和 b (0<a,b≤1000000)代表这个物品的重量和价值

输出描述:

对于每组测试数据,输出对应答案,结果保留两位小数

输入

1
3 2
2 2
5 3
2 1

输出

0.75

说明

对于样例来说,我们选择第一个物品和第三个物品,达到最优目的

 解题思路

题目中说单位价值为选取的 k个物品的总价值和总重量的比值,假设已经选定了k个物品,那么在这k个物品作用下,一个物品的价值x = 这个物品的价值 - 单位价值 * 重量,此时将所有的x累加起来就会有三种情况。

用零来分割,记求和之后的价值为X,如果X>0时,说明了单位价值取小了,需要找大;如果X<0时,说明单位价值取大了,需要找小;如果X=0,说明单位价值刚刚好;

这样来看就可以用二分来解决这个问题了,首先用数组x记入所有的差值,然后再对数组进行排序,这里的排序是降序,因为我们要找最大的单位价值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值