从[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 ...
随机推荐
- HYBControllerTransitions中文文档
中文文档 HYBControllerTransitions是自定义围场动画API封装类库,使用简便.使用者不需要了解太多转场动画知识,即可轻松接入项目使用. 这是一个给开发者们提供自定义push.po ...
- Spark1.3.0安装
之前在用Hadoop写ML算法的时候就隐约感觉Hadoop实在是不适合ML这些比较复杂的算法.记得当时写完kmeans后,发现每个job完成后都需要将结果放在HDFS中,然后下次迭代的时候再从文件中读 ...
- java XML转JSON格式
标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报 分类: [J2SE基础](20) 代码如下所示,从这个例子中发现了代码库的重要性,如果 ...
- JavaScript 事件模型 事件处理机制
什么是事件? 事件(Event)是JavaScript应用跳动的心脏 ,也是把所有东西粘在一起的胶水.当我们与浏览器中 Web 页面进行某些类型的交互时,事件就发生了.事件可能是用户在某些内容上的点击 ...
- uses crt;
1.uses CRT,表示引用CRT.pas单元.CRT.pas单元是Pascal最重要的单元之一,主要用于字符界面的操作,里面内置了清屏.光标定位.删除行.调整字符亮度.前景色.背景色等功能函数.2 ...
- NSDate常用代码范例
NSDate常用代码范例 NSDate类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差(Time Interval)运算和日期之间的早晚比较等. 1. 创建或初始化可用以下方法 用于创建N ...
- php传输大数据大文件时候php.ini相关设置
post_max_size which is directly related to the POST size---针对采用post上传的,大文件,此项为关键 upload_max_filesize ...
- 查看错误日志发现有两个警告(ignored in --skip-name-resolve mode)
2016-08-02 17:30:26 17374 [Warning] 'user' entry '@losnau-223.com' ignored in --skip-name-resolve mo ...
- cocos2d-x介绍
总体来说,cocos2d-x是一个优秀的库. Cocos2d-x没有很复杂的一个架构,基本上是一些以单件形式提供的管理器和是一些围绕SceneGraph(CCNode及其派生类)展开的类.这个设计使得 ...
- JavaScript(一)---- 概述
JavaScript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML(标 ...