分数规划

分数规划

转载自 分数规划 - 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)\) 的最大值/最小值,而这个需要具体情况具体分析。

posted @ 2024-07-22 21:48  superl61  阅读(2)  评论(0编辑  收藏  举报