分数规划
分数规划用来求一个分式的极值。
形象一点就是,给出
另外一种描述:每种物品有两个权值
一般分数规划问题还会有一些奇怪的限制,比如『分母至少为
求解
二分法
分数规划问题的通用方法是二分。
假设我们要求最大值。二分一个答案
那么只要求出不等号左边的式子的最大值就行了。如果最大值比
求最小值的方法和求最大值的方法类似,读者不妨尝试着自己推一下。
Dinkelbach 算法
Dinkelbach 算法的大概思想是每次用上一轮的答案当做新的
分数规划的主要难点就在于如何求
实例
模板
有
个物品,每个物品有两个权值 和 。求一组 ,最大化 的值。
把
为了方便初学者理解,这里放上完整代码:
为了节省篇幅,下面的代码只保留 check
部分。主程序和本题是类似的。
POJ2976 Dropping tests
有
个物品,每个物品有两个权值 和 。 你可以选
个物品 ,使得 最大。 输出答案乘
后四舍五入到整数的值。
把第
洛谷 4377 Talent Show
有
个物品,每个物品有两个权值 和 。 你需要确定一组
,使得 最大。 要求
。
本题多了分母至少为
可以考虑 01 背包。把
那么
一个要注意的地方:
POJ2728 Desert King
每条边有两个权值
和 ,求一棵生成树 使得 最小。
把
代码就是求最小生成树,我就不放代码了。
[HNOI2009]最小圈
每条边的边权为
,求一个环 使得 最小。
把
因为我们只需要判最小值是否小于
另外本题存在一种复杂度
总结
分数规划问题是一类既套路又灵活的题目,一般使用二分解决。
分数规划问题的主要难点在于推出式子后想办法求出
习题
贡献者:@Ir1dXD@Flex@huaruoji@mgt@H-J-Granger@Henry-ZHR@Shuhao@Douglas@ouuan@Xeonacid
本页面最近更新:2/3/2023, 12:00:00 AM,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用