PKU POJ 2976 Dropping tests 解题报告
题目链接: http://acm.pku.edu.cn/JudgeOnline/problem?id=2976
0-1分数规划
最优比例生成树
迭代法
证明:(前几次都是看别人的,这次自己证明)
对于集合s,令l = max{ a(x) / b(x) } = a(x) / b(x).l为所求的最优解,x*为对应的集合
注:b(x)必须恒大于0
然后令z(l) = min{ l × b(x) - a(x) }
证明单调性:
首先若l1 > l2
z(l1) = min { l1 × b(x) - a(x) } = l1 × b(x1) - a(x1) > l2 × b(x1) - a(x1) ≥ min{ l2 × b(x) - a(x) } = z(l2)
=> z(l)是关于l的单调递增函数
再证l = l*时,z(l) = 0
若有x'使得l* × b(x') - a(x') ≤ 0
=> a(x') / b(x') ≤ l => l × b(x') - a(x') ≥ 0
=> l × b(x') - a(x') = 0 即 x' = x
再证z(l) = 0时l = l*
若z(l') = 0, l' ≤ max{a(x) / b(x)} = a(x) / b(x) => b(x) × l' - a(x) ≤ 0
=> l' = l*
最终结果是
z(l) < 0 when l < l*
z(l) = 0 when l = l*
z(l) > 0 when l > l*
从这里我们已经可以用二分l的值的方法计算答案了
但是我们要更快,证明迭代法正确性
z(l) = min{l × b(x) - a(x)}
若l1 ≠ l*
z(l1) = min { l1 × b(x) - a(x) } = l1 × b(x1) - a(x1)
令l2 = a(x1) / b(x1) => b(x1) × l2 - a(x1) = 0
若z(l1) < 0 ,则 l2 > l1,同时l* > l1
又min{ l × b(x) - a(x) } = 0 < l × b(x1) - a(x1) => l* > l2
由此可得 l1 < l2 < l*
z(l1) < 0时同理可得
最终结论
l1 < l2 < l*
由此,每次我们计算出l2,必然比l1接近l*,当靠近到可以忽略精度的位置时,就可以停止了
开始敲代码:
Last updated