费用流解线性规划

以志愿者招募为例。

看一下样例,设x[i]为第i类志愿者招募数,p[i]为志愿者招募数量,得到:

p[1]=x[1]>=2

p[2]=x[1]+x[2]>=3

p[3]=x[2]+x[3]>=4

把下面的不等式转化为等式,设y[i]为第i天多招募的数量,可以化为:

p[1]=x[1]-y[1]=2

p[2]=x[1]+x[2]-y[2]=3

p[3]=x[2]+x[3]-y[3]=4

x[i]>=0,y[i]>=0

令p[0]=p[4]=0,把p差分一下,得到

p[1]-p[0]=x[1]-y[1]=2

p[2]-p[1]=x[2]-y[2]+y[1]=1

p[3]-p[2]=x[3]-y[3]-x[1]+y[2]=1

p[4]-p[3]=y[3]-x[2]-x[3]=-4

x[i]>=0,y[i]>=0

要求最小化y[i]*c[i]

可以建一个网络流图,把每个等式看成一个点(其实恰好就是流量平衡),每个变量看做一条边(解决了费用问题)

如果把正数看做流入,负数代表流出,则可以得到下面的建图方法:

如果p[i]-p[i-1]>0,从s->i连(p[i]-p[i-1],0),否则i->t连(p[i-1]-p[i],0)

i+1->i连(inf,0)

对于每类志愿者,s[i]->t[i]+1连(inf,c[i])

坑:常数项没懂。

总结:如果有若干个0<=x<=p且每个式子出现恰好2次,且一次为+1一次为-1,可以用费用流解线性规划。

在机场中,限制从>=变成<=,把i+1->i连(inf,0)变成i->i+1连(inf,0)即可。

猜你喜欢

转载自www.cnblogs.com/cszmc2004/p/12978154.html
今日推荐