从[NOI2008志愿者招募]浅谈线性规划在网络流构图上的巧用
首先来看一下题。。http://www.lydsy.com/JudgeOnline/problem.php?id=1061
1061: [Noi2008]志愿者招募
Description
申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者。经过估算,这个项目需要N 天才能完成,其中第i 天至少需要Ai 个人。 布布通过了解得知,一共有M 类志愿者可以招募。其中第i 类可以从第Si 天工作到第Ti 天,招募费用是每人Ci 元。新官上任三把火,为了出色地完成自己的工作,布布希望用尽量少的费用招募足够的志愿者,但这并不是他的特长!于是布布找到了你,希望你帮他设计一种最优的招募方案。Input
第一行包含两个整数N, M,表示完成项目的天数和可以招募的志愿者的种类。 接下来的一行中包含N 个非负整数,表示每天至少需要的志愿者人数。 接下来的M 行中每行包含三个整数Si, Ti, Ci,含义如上文所述。为了方便起见,我们可以认为每类志愿者的数量都是无限多的。Output
仅包含一个整数,表示你所设计的最优方案的总费用。
Sample Input
3 3
2 3 4
1 2 2
2 3 5
3 3 2Sample Output
14HINT
1 ≤ N ≤ 1000,1 ≤ M ≤ 10000,题目中其他所涉及的数据均 不超过2^31-1。
简单的叙述一下题意:给定N天内每一天所需要的人数,以及M类人,每类人有三个属性(开始时间,结束时间,费用),每个人只能在其属性范围内工作,求最小的花费(每个人只能用一次)。
这么复述一遍后应该就很容易想到线性规划了吧。。
设xi表示第i个人用了几个,ci表示第i个人的费用属性,pi表示第i天所需要的人的数量。
那么就可以列出以下线性约束不等式组:
Minimize:Σcixi (1≤i≤n)
s.t. Σxi≥pi (第i个人可以在第i天工作)
(额貌似有点抽象。。那就举个例子吧。。)
看一下样例。。
即:
一共有三天,第一天需要2人,第二天需要3人,第三天需要4人。
一共有三类人,按照每类人的属性为(开始时间,结束时间,费用)来表示,那么就是(1,2,2),(2,3,5),(3,3,2)。
然后就可以写了。
Minimize:2x1+5x2+2x3
s.t. x1≥2
x1+5x2≥3
5x2+x3≥4
那么化简成松弛型后就是这样了:
Zmin=2x1+5x2+2x3
p1=x1-y1=2
p2=x1+5x2-y2=3
p3=5x2+x3-y3=4
但是如果要弄成网络流还有很大出入的,毕竟网络流的线性规划部分模型是这样的:
Σ流出-Σ流入=0
也就是说每一个变量在松弛后的等式中要出现一正一负!然后就可以把每一个等式当做一个点,系数互为相反数的一对等式连边,然后去跑网络流就行了。
但是上面那个式子怎么搞呢?要不。。差分吧。。
很容易发现列完式子后每一个x都是正的,而且xi是按照一段区间的形式出现的,如果要只保留一正一负的话就可以用差分搞咯,也就是说下面的式子减去上面的式子,然后就可以把相同的一段xi全部都给消掉了。。然后看一下边界处:首先是xs,即最小的那个xi变量,把它与它上面那个式子减一下后xs就成了负的,然后我们考虑xt+1也就是最后一个xi的下一个式子,这个式子里是不包含xi的,那么与上面那个式子相减后就会出现一个负的xi然后就可以发现每一个xi都是一正一负出现了,然后就满足了流量平衡,直接套网络流就ok了。。。
然而你们以为网络流会更快么?不不不。。。bzoj上跑的结果是线性规划比网络流快四倍。。。
以上就是全部内容了。。
然而在信息学竞赛中,虽然说线性规划比较直接。。但是空间简直伤不起啊。。据说有一种关于空间的优化叫做什么矩阵
不过网络流的建模的确很玄学。。大概遇到网络流的题目就要炸了。。。
从[NOI2008志愿者招募]浅谈线性规划在网络流构图上的巧用的更多相关文章
- 线性规划||网络流(费用流):COGS 288. [NOI2008] 志愿者招募
[NOI2008] 志愿者招募 输入文件:employee.in 输出文件:employee.out 简单对比 时间限制:2 s 内存限制:512 MB [问题描述] 申奥成功后,布布经过 ...
- 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募
线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...
- 【BZOJ 1061】 1061: [Noi2008]志愿者招募 (线性规划与网络流)**
1061: [Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短 ...
- BZOJ 1061: [Noi2008]志愿者招募
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 4064 Solved: 2476[Submit][Stat ...
- BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3975 Solved: 2421[Submit][Stat ...
- [BZOJ1061][Noi2008]志愿者招募
[BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...
- bzoj1061: [Noi2008]志愿者招募
线性规划与费用流.http://www.cnblogs.com/iiyiyi/p/5616080.html.数组范围开错了!!!然后2.31-1=0x7fffffff!=0x7f7f7f7f. 开始以 ...
- 【费用流】BZOJ1061: [Noi2008]志愿者招募(这题超好)
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 5291 Solved: 3173[Submit][Stat ...
- BZOJ 1061: [Noi2008]志愿者招募 [单纯形法]【学习笔记看另一篇吧】
1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 3975 Solved: 2421[Submit][Stat ...
随机推荐
- PAT (Advanced Level) 1011. World Cup Betting (20)
简单题. #include<iostream> #include<cstring> #include<cmath> #include<algorithm> ...
- CodeForces 606A Magic Spheres
水题 /* *********************************************** Author :Zhou Zhentao Email :774388357@qq.com C ...
- USACO刷题之路
重拾经典 本科生涯结束了,在大学做的ACM竞赛现在基本忘的差不多了.USACO作为一个经典的题库,本来是面向OI选手的,但是由于题目质量很高所以受到大家的好评,所以我这次就从它开始我的刷题之路吧. 由 ...
- 汇总博客常见的api接口地址(windows live write)
汇总博客常见的api接口地址(windows live write) 1. cnblogs 日志地址,直接输入 http://www.cnblogs.com/xxxxx/ api接口 http://w ...
- Oracle教程-安装、结构(一)
本文安装的是Oracle中的11G版本 一. 将文件win32_11gR2_database_1of2.zip和win32_11gR2_database_2of2.zip解压. 注意:这两个文件解压到 ...
- COCOS2DX遇到的问题
1 新增类无法在别的类里面include到的问题: 去项目-> 配置属性-> C/C++-> 常规-> 附加包含目录中增加类的文件夹路径 2 新增类出现 extensions\ ...
- MongoDB 基本命令
./mongo 进入命令行. 1.show dbs 显示当前数据库服务器上的数据库 2.use pagedb 切换到指定数据库pagedb的上下文,可以在此上下文中管理pagedb数据库以及其中的集 ...
- [iOS、Unity、Android] 浅谈闭包的使用方法
前言 我们经常所编程语言的的进步速度是落后于硬件的发展速度的. 但是最近几年,闭包语法在各个语言中都有自己的体现形式,例如 • C语言中使用函数指针作为回调函数的入口: • Java和C#语言中的La ...
- lwip移植到stm32上-enc28j60,103mcu(2)
前面小玩了一下ucos和lwip,但是都还不是真正的网络多任务,真正的网络多任务应该是什么样子的呢?应该是有一个专门的任务负责网络的通讯,他负责将数据发送出去,将数据接收回来,而其他的需要用到网络的任 ...
- 微信小程序一些简单的快捷键
常用快捷键 格式调整 Ctrl+S:保存文件Ctrl+[, Ctrl+]:代码行缩进Ctrl+Shift+[, Ctrl+Shift+]:折叠打开代码块Ctrl+C Ctrl+V:复制粘贴,如果没有选 ...