01 分数规划

推荐博客 : http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html

 

学习这东西源于牛客多校大佬们的一道签到题....

先来看一个问题

01分数规划问题:所谓的01分数规划问题就是指这样的一类问题,给定两个数组,a[i]表示选取i的收益,b[i]表示选取i的代价。如果选取i,定义x[i]=1否则x[i]=0。每一个物品只有选或者不选两种方案,求一个选择方案使得R=sigma(a[i]*x[i])/sigma(b[i]*x[i])取得最值,即所有选择物品的总收益/总代价的值最大或是最小。

 

问题分析 :

 数学分析中一个很重要的方法就是分析目标式,这样我们来看目标式。

R=sigma(a[i]*x[i])/sigma(b[i]*x[i])

我们来分析一下他有什么性质可以给我们使用。

我们先定义一个函数F(L):=sigma(a[i]*x[i])-L*sigma(b[i]*x[i]),显然这只是对目标式的一个简单的变形。分离参数,得到F(L):=sigma((a[i]-L*b[i])*x[i])。这时我们就会发现,如果L已知的话,a[i]-L*b[i]就是已知的,当然x[i]是未知的。记d[i]=a[i]-L*b[i],那么F(L):=sigma(d[i]*x[i]),多么简洁的式子。我们就对这些东西下手了。

 

显然对于上面的式子,当 L 取最大值时, F(L) = 0 , 而当 L 的取值大于最大值时,此时F(L)的值是 < 0 的, 当L取小时, F(L) > 0 ,那么我们这里根据这个性质就可以去二分 L 了

然后再去选择物品,能少选就少选 !

 

 牛客入门题目 : https://www.cnblogs.com/ccut-ry/p/9416638.html

 

posted @ 2018-08-03 21:53  楼主好菜啊  阅读(129)  评论(0编辑  收藏  举报