分数规划
分数规划用来求一个分式的极值:给出 ai,bia_i,b_iai,bi,求一组 wi∈{ 0,1}w_i\in\{0,1\}wi∈{ 0,1} 使 ∑i=1naiwi∑i=1nbiwi\displaystyle\frac{\sum_{i=1}^n a_iw_i}{\sum_{i=1}^n b_iw_i}∑i=1nbiwi∑i=1naiwi 最小化或最大化,再加上一些奇怪的限制。
所以背包、树形背包、最小生成树、最短路、二分图最大匹配等问题都可以套个分数规划变得毒瘤。
求解
二分求解
最大值:二分一个答案 midmidmid,则:
∑i=1naiwi∑i=1nbiwi>mid ⟹ ∑i=1naiwi−mid×∑i=1nbiwi>0 ⟹ ∑i=1nwi(ai−mid×bi)>0 \displaystyle\frac{\sum_{i=1}^n a_iw_i}{\sum_{i=1}^n b_iw_i}>mid \\ \implies\sum_{i=1}^n a_iw_i - mid \times\sum_{i=1}^n b_iw_i>0 \\ \implies\sum_{i=1}^nw_i(a_i-mid \times b_i) > 0 ∑i=1nbiwi∑i=1naiwi>mid⟹i=1∑naiwi−mid×i=1∑nbiwi>0⟹i=1