0/1分数规划

模型

给定 \(a_1,a_2,......,a_n\) 和 \(b_1,b_2,......,b_n\)

求一组 \(x_1,x_2,......,x_n\),使得 \(\frac{\sum_{i=1}^{n} a_i*x_i}{\sum_{i=1}^{n} b_i*x_i}\) 最大

解法

二分答案

判断能否使 \(\frac{\sum_{i=1}^{n} a_i*x_i}{\sum_{i=1}^{n} b_i*x_i}\ge mid\),若可以则 \(L=mid\) 否则 \(R=mid\)

化简这个式子

\[\frac{\sum_{i=1}^{n} a_i*x_i}{\sum_{i=1}^{n} b_i*x_i}\ge mid \]

\[\Rightarrow{\sum_{i=1}^{n} a_i*x_i}\ge mid*{\sum_{i=1}^{n} b_i*x_i} \]

\[\Rightarrow{\sum_{i=1}^{n} (a_i-b_i*mid)*x_i}\ge 0 \]

所以 \((a_i-b_i*mid)\ge 0\) 时 \(x_i\) 取 \(1\),\((a_i-b_i*mid)< 0\) 时 \(x_i\) 取 \(0\) 即可

例题

P10505 Dropping Test

模版题,也就是上面的取法,但要求至少取 \((n-k)\) 个 \(1\)

因此对于每一个 \(mid\) 将 \((a_i-b_i*mid)*x_i\) 从大到小排序取前 \((n-k)\) 个,看和是否大于 \(0\)

posted @ 2026-10-30 14:50  Rainesxiao  阅读(2)  评论(0)    收藏  举报