题目描述:
一个持续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