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\) 即可
例题
模版题,也就是上面的取法,但要求至少取 \((n-k)\) 个 \(1\)
因此对于每一个 \(mid\) 将 \((a_i-b_i*mid)*x_i\) 从大到小排序取前 \((n-k)\) 个,看和是否大于 \(0\)

浙公网安备 33010602011771号