0/1分数规划学习笔记
一、基本思想
给定 \(n\) 对整数 \(a_i, b_i\),从中选出若干对,使选出的数中,\(a\) 的和与 \(b\) 的和的比值最大。
即设定 \(x_i \in \{0, 1\}\),使得下式最大:
\[\dfrac{\sum_{i=1}^n a_i*x_i}{\sum_{i=1}^n b_i*x_i} \]
主要思想为 二分答案。猜一个值 \(T\),则可以将如下判定:
\[\dfrac{\sum_{i=1}^n a_i*x_i}{\sum_{i=1}^n b_i*x_i} \ge T
\]
转化为如下判定:
\[\sum_{i=1}^n (a_i-b_i*T)*x_i \ge 0
\]
本着 贪心 的原则,我们选择所有 \(a_i-b_i*T > 0\)。有如下结论:
-
当 存在 一个方案,使得上式 \(\ge 0\) 时,则 \(ans \ge T\)。
-
当对于 任意 一个方案,都有上式 \(< 0\),则 \(ans < T\)。
\(O(n)\) 贪心选取,\(O(\log n)\) 二分,总时间复杂度 \(O(n \log n)\)。
同理,我们也可以求解分数规划的最小值。这时只要把结论什么的都反过来就行了。
二、题目
题目就是在上面的基础模型上加了许多限制。比如,不是选出任意对而是必须选出 \(k\) 对。但这些限制条件都不会影响我们做二分答案,只是在贪心选取时必须将这些限制考虑进去罢了。
-
最优比率:分数规划 + 个数限制。
-
P4377 [USACO18OPEN] Talent Show G:分数规划 + 01 背包。
-
P1642 规划:分数规划 + 树形 DP。
-
最优比率生成树:分数规划 + 最小生成树。
-
P3199 [HNOI2009] 最小圈、P2868 [USACO07DEC] Sightseeing Cows G、P3288 [SCOI2014] 方伯伯运椰子:分数规划 + 判负权环。其中“方伯伯运椰子”一题类比网络流,使用了 建反向边 的技巧模拟一个相反操作。
-
P5319 [BJOI2019] 奥术神杖:看到乘法 + 几何平均数时,通过对任意一个数 取对数 的方法转化为平均数问题。