[NOI2008]志愿者招募——线性规划模型的网络流问题

来源:互联网 发布:简易论坛源码 编辑:程序博客网 时间:2024/05/28 22:12

题目描述:

一个持续n天的活动,其中第i 天至少需要Ai 个志愿者。 

一共有M 类志愿者。其中第i 类可以从第Si 天工作到第Ti 天,招募费用是每人Ci 元。

用尽量少的费用招募足够的志愿者。


分析:

这题直接建模比较困难 = = || ,可以考虑用数学手段建模:

设Xi表示i类志愿者选多少个,则题目可以描述为:

X1+X2+X3 ≥ A1

X2+X3 ≥ A2

X3+X4 ≥ A3 (= = 就是形如这个的方程组啦,这里是举个例子

最小化:Σ Xi * Ci


可以发现这是一个线性规划的模型。

对于网络流,我们知道,其流量平衡方程有着类似形式,不过有更多限制:

1.用等号连接。

2.每个变量出现两次,一次正一次负。

3.所有变量均非负。


再考虑将本题模型进一步转换:

X1+X2+X3 - Y1 - A1 = 0

X2+X3 - Y2 - A2 = 0

X3+X4 - Y3 - A3 = 0

观察发现,同一未知数所出现的方程一定是一段连续的(题意)。考虑每一行(包括最后的空行)减去上一行,得到新的方程组:

每个未知数刚好出现两次,且一正一负,至此,网络流模型就基本建成了。 ( >_< 


把每个方程看作一个点,+即为入流,-即为出流,常数项来自源或汇。

这样,新建源S、汇T,连好边后,跑一遍最小费用最大流即可。


最后总结一下:在普通建模方法遭遇瓶颈时,可以考虑转换成理性愉悦的线性规划模型,从数学方法入手,建立模型。

( Orz Beyond The Void



原创粉丝点击