#题面
#题目描述
Farmer John 要带着他的 头奶牛(编号为 )到农业展览会上去参加每年的达牛秀!他的第 头奶牛重量为 ,才艺水平为 ,两者都是整数。
在到达时,Farmer John 就被今年达牛秀的新规则吓到了:
(一)参加比赛的一组奶牛必须总重量至少为 (这是为了确保是强大的队伍在比赛,而不仅是强大的某头奶牛);并且
(二)总才艺值与总重量的比值最大的一组获得胜利。
Farmer John 注意到他的所有奶牛的总重量不小于 ,所以他能够派出符合规则(一)的队伍。帮助他确定这样的队伍中能够达到的最佳的才艺与重量的比值。
#输入格式
第一行是两个整数,分别表示牛的个数 和总重量限制 。
第 到 行,每行两个整数,第 行的整数表示第 头奶牛的重量 和才艺水平 。
#输出格式
请求出 Farmer John 用一组总重量最少为 的奶牛最大可能达到的总才艺值与总重量的比值。
如果你的答案是 ,输出 向下取整的值,以使得输出是整数(当问题中的数不是一个整数的时候,向下取整操作在向下舍入到整数的时候去除所有小数部分)。
#输入输出样例
样例输入 #1
3 15
20 21
10 11
30 31
样例输出 #1
1066
样例解释 #1
在这个例子中,总体来看最佳的才艺与重量的比值应该是仅用一头才艺值为 、重量为 的奶牛,但是由于我们需要至少 单位的重量,最优解最终为使用这头奶牛加上才艺值为 、重量为 的奶牛。这样的话才艺与重量的比值为 ,乘以 向下取整之后得到 。
#数据范围与提示
对于 的测试点,保证 ,,,。
#分数规划
分数规划可以用来求一个分式的极值。
#定义
给出 和 ,求一组 ,最小化或最大化
#求解
分数规划问题的通用求解方法是二分。以求最大值为例,二分一个答案 ,有推导过程:
这样就只需要求出不等号左边的式子的最大值了。如果最大值比 要大,说明 是可行的,否则不可行。
#思路
0/1 分数规划。
本题中有一个分母至少为 的限制,因此可以考虑使用 0/1 背包代替原先分数规划中的贪心求解。把 作为第 个物品的重量, 作为第 个物品的价值再转移即可。
可以将 的状态都压缩到 上,节省内存空间,代码更简洁,正确性显然。
#代码
1 |
|