01分数规划问题适用于此类题目:
- 题意为求出类似 w=∑ni=1vali∑ni=1costi 的最值问题,且此时上下元素个数相同。
01分数规划的一般思路:
它源自于“求值 → 判定”的思想,即为了求一个数值,采用二分枚举答案逼近这个极值。显然判定一个解是否满足题意是比求出符合题意的解要简单的。
引用上述公式,为了求
wmax=∑ni=1vali∑ni=1costi
我们可以将其转化为
∑ni=1vali∑ni=1costi≥w
此时分数是不好处理的,于是我们考虑将其整理为整式:
∑i=1nvali≥w⋅∑i=1ncosti
移项得到
∑i=1n(vali−w⋅costi)≥0
有了这个式子,我们就可以在二分答案的时候check了。
01分数规划举例:最优比率生成树
(说实在话没有找到比较好的裸题……poj那个也比较毒)
Description:
给定一张包含n个结点,m条边的无向连通图,边上有两个属性:价值 val 与花费 cost ,求出该图的生成树,使得路径权值的平均值最大:
∑edge(u,v)∈MSTval∑edge(u,v)∈MSTcost
Solution:
设
w=∑edge(u,v)∈MSTval∑edge(u,v)∈MSTcost则按照上述定义就有∑edge(u,v)∈MST(val−w∗cost)≥0定义 dist=val−w∗cost ,则最终该问题转化为是否存在生成树,使得∑{dist∣edge∈MST}≥0即可。对于每次check,我们预处理出每条边的 dist ,再用Kruskal算法跑一遍即可。