分数规划
转载自 分数规划 - OI Wiki
模板
给定 \(n\) 和 \(a_i,b_i\), 求一组 \(w_i \in 0,1\), 最小化或最大化
\[\frac{\sum_{i=1}^{n}{a_i\times w_i}}{\sum_{i=1}^{n}{b_i\times w_i}} \]- 求解:
二分一个答案 \(mid\), 考虑如何判定 \(\frac{\sum_{i=1}^{n}{a_i\times w_i}}{\sum_{i=1}^{n}{b_i\times w_i}} > mid\), 推导后得:
\[\sum w_i \times(a_i-mid \times b_i) > 0 \]将 \(w_i \times(a_i-mid \times b_i\) 作为第 \(i\) 个数的权值, 最后统计时只选正的即可(<0 就只选负的)
最后看总和是否 \(>0\) 即可.
SOJ 烧结核凝晶
规定只能选其中 \(k\) 个.
- 求解:没有太大变化,选前 \(k\) 个即可.
洛谷 4377 Talent Show (限制分母)
要求 \(\sum w_i \times b_i \ge W\)
无法直接贪心了
W较小,考虑01背包,以 \(b_i\) 作重量 \(w_i \times(a_i-mid \times b_i\) 作权值,最后看 \(f[W]\) 的正负.
注意:\(\sum w_i \times b_i\) 可能超过 \(W\), 此时可直接视为 \(W\), 相当于把合法的全部算到一起了.
POJ2728 Desert King(树上规划)
把 \(a_i-mid \times b_i\) 作为每条边的权值,那么最小生成树就是最小值.
[HNOI2009] 最小圈(图上规划)
把 \(a_i-mid\) 作为边权,那么权值最小的环就是最小值。只需要判断其总和是否小于0即可
相当于看有没有负权环(SPFA)
总结
分数规划问题是一类既套路又灵活的题目,一般使用二分解决。
分数规划问题的主要难点在于推出式子后想办法求出 \(\sum w_i \times(a_i-mid \times b_i)\) 的最大值/最小值,而这个需要具体情况具体分析。
标签:分数,sum,mid,times,权值,规划 From: https://www.cnblogs.com/superl61/p/18317018