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\) 对。但这些限制条件都不会影响我们做二分答案,只是在贪心选取时必须将这些限制考虑进去罢了。

posted @ 2024-05-30 10:52  David_Mercury  阅读(10)  评论(0编辑  收藏  举报