是什么
0-1分数规划解决这样一类问题。给定一些元素,可以进行选取,选取有好处(b)和花费(c),最后求好处的和与花费的和的比例最大或最小。
用r来表示比例,
x[i]
x
[
i
]
来表示对应元素是否选择,取值为0,即为选择,取值为1即为不选择,那么问题就变成了:
r=∑b[i]∗x[i]∑c[i]∗x[i]
r
=
∑
b
[
i
]
∗
x
[
i
]
∑
c
[
i
]
∗
x
[
i
]
怎么做
对原式子做一个变形。
r∗∑c[i]∗x[i]=∑b[i]∗x[i]
r
∗
∑
c
[
i
]
∗
x
[
i
]
=
∑
b
[
i
]
∗
x
[
i
]
0=∑b[i]∗x[i]−r∗∑c[i]∗x[i]
0
=
∑
b
[
i
]
∗
x
[
i
]
−
r
∗
∑
c
[
i
]
∗
x
[
i
]
在这里把
r
r
再看做一个未知数,令其为,将其改写为函数
z(r′)
z
(
r
′
)
,转换为另一个问题
z(r′)=∑b[i]∗x[i]−r∗∑c[i]∗x[i]
z
(
r
′
)
=
∑
b
[
i
]
∗
x
[
i
]
−
r
∗
∑
c
[
i
]
∗
x
[
i
]
由于
c[i]>0、x[i]∈0,1
c
[
i
]
>
0
、
x
[
i
]
∈
0
,
1
,那么这个函数具有的性质也显而易见。
- r′=r r ′ = r 时, z(r′)=0 z ( r ′ ) = 0
- r′<r r ′ < r 时, z(r′)>0 z ( r ′ ) > 0
- r′>r r ′ > r 时, z(r′)<0 z ( r ′ ) < 0
这个函数是严格单调递减的。 有了单调的性质,就可以二分找答案了。
不过需要提醒注意的是,我们最后寻找的目标是
r
r
<script type="math/tex" id="MathJax-Element-1333">r</script>。
练习
POJ2976 Dropping tests——普通的01分数规划
POJ2728 Desert King——最优比率生成树
POJ3621Sightseeing Cows——最优比率环
POJ3155——Hard Life最大密度子图
ZOJ2676——Network Wars
POJ3266——CowSchool0/1分数规划+数据结构
参考
https://blog.csdn.net/hhaile/article/details/8883652
http://www.cnblogs.com/shenben/p/6379356.html