线性规划裸题。。。

根据题目很容易可以得到线性规划方程(以样例为例):

Min(2*x1+5*x2+2*x3)

x1+ 0+ 0>=2

x1+x2+ 0>=3

0+x2+x3>=4

x1,x2,x3>=0

再将方程对偶,得到:

Max(2*x1+3*x2+4*x3)

x1+x2+ 0<=2

0+x2+x3<=5

0+ 0+x3<=2

x1,x2,x3>=0

这就是线性规划的标准型了。

为了方便单纯型算法,加入变量x4,x5,x6:

Max(2*x1+3*x2+4*x3)

x4+x1+x2+ 0=2

x5+ 0+x2+x3=5

x6+ 0+ 0+x3=2

x1,x2,x3,x4,x5,x6>=0

这就是松弛型。显然此时最优解不变。

将松弛型写成矩阵的形式:

x1 x2 x3

x4  1  1  0  2

x5  0  1  1  5

x6  0  1  1  2

2   3  4  0(k)

当x1,x2,x3取0时,显然满足条件,此时答案为右下角的常数k

我们只需不断增大k,当k达到最大值时最优解就是k了。

那么怎么增大k呢?显然如果我们增大x1,答案会更优。

但x1不能无限制地增大,对于前3个方程,我们得到x1的限制:

1、x1<=2

2、x1无限制

3、x1无限制

我们选择最紧的一个限制1,将x1增大到它,再交换x1,x4。

交换之后再将某些系数改变,使其满足方程就可以了。

于是我们可以不断交换,直到矩阵最后一行的系数都不为正就可以了。最优解就是k。

具体看代码。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
#define N 1001
#define M 10001
#define DB double
#define Eps 1e-7
#define INF 0x3f3f3f3f3f3f3f3f
DB a[M][N],c[N],b[M],Ans,Tmp;
int i,j,n,m,l,r,x;
inline void Pivot(int x,int y){ //转轴操作,使矩阵满足方程
b[x]/=a[x][y];
for(int i=;i<=n;i++)if(i!=y)a[x][i]/=a[x][y];
a[x][y]=/a[x][y];
for(int i=;i<=m;i++)
if(i!=x&&fabs(a[i][y])>Eps){
b[i]-=a[i][y]*b[x];
for(int j=;j<=n;j++)if(j!=y)a[i][j]-=a[i][y]*a[x][j];
a[i][y]*=-a[x][y];
}
Ans+=c[y]*b[x];
for(int i=;i<=n;i++)if(i!=y)c[i]-=c[y]*a[x][i];
c[y]*=-a[x][y];
}
inline DB Simplex(){
while(){ //不断交换
for(i=;i<=n;i++)if(c[i]>Eps)break;
if(i>n)return Ans;
Tmp=INF;
for(j=;j<=m;j++)
if(a[j][i]>Eps&&b[j]/a[j][i]<Tmp)Tmp=b[j]/a[j][i],x=j;
if(Tmp==INF)return INF;
Pivot(x,i); //交换第x行,第i列
}
}
int main()
{
scanf("%d%d",&n,&m);
for(i=;i<=n;i++)scanf("%lf",&c[i]);
for(i=;i<=m;i++){
scanf("%d%d%lf",&l,&r,&b[i]);
for(j=l;j<=r;j++)a[i][j]=;
}
printf("%d",(int)(Simplex()+0.5));
}

bzoj1061

bzoj1061--线性规划的更多相关文章

  1. 网络流解线性规划问题 BZOJ1061: [Noi2008]志愿者招募

    线性规划定义: 在给定有限的资源和竞争约束情况下,很多问题都可以表述为最大化或最小化某个目标.如果可以把目标指定为某些变量的线性函数,而且如果可以将资源约束指定为这些变量的等式或不等式,则得到了一个线 ...

  2. 单纯形求解线性规划(BZOJ1061)

    推荐一篇论文:http://wenku.baidu.com/view/ce5784754a7302768f99391d 我们设xi为第i个志愿者的招募次数,以样例为例,则不难列出如下的线性规划方程: ...

  3. BZOJ1061 NOI2008 志愿者招募 线性规划、费用流

    传送门 一道思路很妙的线性规划网络流 设\(X_i\)表示第\(i\)天需要的人数,\(P_i\)表示第\(i\)种人雇佣的个数 那么我们可以列出一系列式子 比如说样例就可以列出三个式子: \(P_1 ...

  4. 线性规划费用流解法(Bzoj1061: [Noi2008]志愿者招募)

    题面 传送门 Sol 线性规划费用流解法用与求解未知数为非负数的问题 这道题可以列出一堆形如 \(x[i]+x[j]+x[k]+...>=a[p]\) 的不等式 我们强行给每个式子减去一个东西, ...

  5. 【bzoj1061】[NOI2008]志愿者招募 线性规划与费用流

    题目描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完成,其中第i ...

  6. BZOJ1061: [Noi2008]志愿者招募(线性规划)

    Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 5725  Solved: 3437[Submit][Status][Discuss] Descript ...

  7. [BZOJ1061][Noi2008]志愿者招募 线性规划+费用流

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 根据题意列方程,然后用网络流解线性规划. 题解直接贴ByVoid的吧,太神了:htt ...

  8. BZOJ-1061 志愿者招募 线性规划转最小费用最大流+数学模型 建模

    本来一眼建模,以为傻逼题,然后发现自己傻逼...根本没想到神奇的数学模型..... 1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 ...

  9. 【bzoj1061】 Noi2008—志愿者招募

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 (题目链接) 题意 给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l, ...

  10. [BZOJ1061][Noi2008]志愿者招募

    [BZOJ1061][Noi2008]志愿者招募 试题描述 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短期志愿 ...

随机推荐

  1. A tutorial that will show you how to build an instant messaging app with Sinch.

    http://stackoverflow.com/questions/26247986/unsatisfiedlinkerror-couldnt-load-sinch-android-rtc-from ...

  2. The 2013 ACMICPC Asia Regional Chengdu

    还有19天出发北京站,今年北京站的出题方是上交,去年他们出的成都现场的赛题,首先复盘一下. 去年的成都是我经历的第一次现场赛,也是近距离第一次见到了CLJ的真人,最后也是被虐惨了,那时候是声闻大神带着 ...

  3. STL优先队列的使用

    STL中有一个优先队列的容器可以使用. [头文件] queue 队列容器 vector 向量容器 [操作] 优先级队列支持的操作 q.empty()         如果队列为空,则返回true,否则 ...

  4. andorid之摄像头驱动流程--MTK平台

    原文地址:andorid之摄像头驱动流程--MTK平台 作者:守候心田 camera成像原理: 景物通过镜头生产光学图像投射到sensor表面上,然后转为模拟电信号,经过数模变成数字图像信号,在经过D ...

  5. x86_64是什么意思

    x86指的是32位计算机的架构,也指32位的操作系统,比如i386,i686,i486等:x86_64和x64指的都是64位架构,也指64位操作系统

  6. SQL语句详细汇总

    SQL语句详细汇总 | 浏览:3061 | 更新:2013-06-10 19:50 一.基础 1.说明:创建数据库 CREATE DATABASE database-name 2.说明:删除数据库 d ...

  7. iOS纯代码手动适配 分类: ios技术 2015-05-04 17:14 239人阅读 评论(0) 收藏

    首先说下让自己的程序支持iPhone6和6+,第一种使用官方提供的launch screen.xib,这个直接看官方文档即可,这里不再多述:第二种方法是和之前iPhone5的类似,比较简单,为iPho ...

  8. 【转】国外程序员整理的Java资源大全

    Java几乎是许多程序员们的入门语言,并且也是世界上非常流行的编程语言.国外程序员Andreas Kull在其Github上整理了非常优秀的Java开发资源,推荐给大家.译文由ImportNew- 唐 ...

  9. DownloadManager 版本更新,出现 No Activity found to handle Intent 的解决办法

    项目中,进行版本更新的时候,用的是自己写的下载方案,最近看到了使用系统服务 DownloadManager 进行版本更新,自己也试试. 在下载完成以后,安装更新的时候,出现了一个 crash,抓取的 ...

  10. 概率dp初探

    论文链接:  http://wenku.baidu.com/link?url=vEcfxpqAvGRf6JL9IL2R6v8plBgPnaP3tKp5niOBmoajk0y4CcpwFzL4SkfGS ...