zoukankan      html  css  js  c++  java
  • 费用流解线性规划

    以志愿者招募为例。

    看一下样例,设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)即可。

  • 相关阅读:
    mfc cef<转>
    js人形时钟
    opencv给图片添加文字水印<转>
    strcore.cpp(156) 内存泄漏
    WebAssembly相关
    mingw 搭建Emscripten 环境
    mingw 设置python 设置git环境变量
    android平台yuv缩放相关<转>
    多媒体基础知识之PCM数据《 转》
    iOS 5 故事板进阶(2)
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/12978154.html
Copyright © 2011-2022 走看看