首先来看一下题。。http://www.lydsy.com/JudgeOnline/problem.php?id=1061
简单的叙述一下题意:给定N天内每一天所需要的人数,以及M类人,每类人有三个属性(开始时间,结束时间,费用),每个人只能在其属性范围内工作,求最小的花费(每个人只能用一次)。
这么复述一遍后应该就很容易想到线性规划了吧。。
设x表示第i个人用了几个,c表示第i个人的费用属性,p表示第i天所需要的人的数量。
那么就可以列出以下线性约束不等式组:
Minimize:Σcx (1≤i≤n)
s.t. Σx≥p (第i个人可以在第i天工作)
(额貌似有点抽象。。那就举个例子吧。。)
看一下样例。。
即:
一共有三天,第一天需要2人,第二天需要3人,第三天需要4人。
一共有三类人,按照每类人的属性为(开始时间,结束时间,费用)来表示,那么就是(1,2,2),(2,3,5),(3,3,2)。
然后就可以写了。
Minimize:2x+5x+2x
s.t. x≥2
x+5x≥3
5x+x≥4
那么化简成松弛型后就是这样了:
Z=2x+5x+2x
p=x-y=2
p=x+5x-y=3
p=5x+x-y=4
但是如果要弄成网络流还有很大出入的,毕竟网络流的线性规划部分模型是这样的:
Σ流出-Σ流入=0
也就是说每一个变量在松弛后的等式中要出现一正一负!然后就可以把每一个等式当做一个点,系数互为相反数的一对等式连边,然后去跑网络流就行了。
但是上面那个式子怎么搞呢?要不。。差分吧。。
很容易发现列完式子后每一个x都是正的,而且x是按照一段区间的形式出现的,如果要只保留一正一负的话就可以用差分搞咯,也就是说下面的式子减去上面的式子,然后就可以把相同的一段x全部都给消掉了。。然后看一下边界处:首先是x,即最小的那个x变量,把它与它上面那个式子减一下后x就成了负的,然后我们考虑x也就是最后一个x的下一个式子,这个式子里是不包含x的,那么与上面那个式子相减后就会出现一个负的x然后就可以发现每一个x都是一正一负出现了,然后就满足了流量平衡,直接套网络流就ok了。。。
然而你们以为网络流会更快么?不不不。。。bzoj上跑的结果是线性规划比网络流快四倍。。。
以上就是全部内容了。。
然而在信息学竞赛中,虽然说线性规划比较直接。。但是空间简直伤不起啊。。据说有一种关于空间的优化叫做什么矩阵
不过网络流的建模的确很玄学。。大概遇到网络流的题目就要炸了。。。