线性规划裸题。。。

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

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. HDU 2412 Party at Hali-Bula

    树形DP水题.判断取法是否唯一,dp的时候记录一下每个状态从下面的子节点推导过来的时候是否唯一即可. #include<cstdio> #include<cstring> #i ...

  2. CodeForces 617D Polyline

    无脑暴力判断. #include<cstdio> #include<cstring> #include<vector> #include<cmath> ...

  3. iOS推送的众多坑

    新来的一家公司,昨天和同事解决推送问题(工程里有集成百度推送和环信即时通讯),信誓旦旦的声称:" app在前台和后台运行时,推送触发的是didReceiveRemoteNotificatio ...

  4. Android 5.0之前屏幕截图的方法

    截图的几种方法 Android获取屏幕截图主要有以下三种方法 1.通过view.getDrawingCache()获取指定View的绘制缓存来实现截屏. 这种方式Android 5.0之前也可以,且不 ...

  5. MPU6050程序(转)

    源:MPU6050程序 初始化定义 #ifndef _MPU6050_H #define _MPU6050_H #define PORT_USED 0 #define MPU6050_ADDRESS_ ...

  6. 关于jquery的$each((Object, function(p1, p2)用法

    通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) ...

  7. sql语句:if exists语句使用

    ') begin print('exists ') end else begin print('no exists ') end go

  8. APK的反编译

    有秘密的地方就有见不得光的东西,我讨厌这些,所以对于某一个XX圈APP极其反感,感觉就像一个色情网站 一.ApkTool的使用 看了几个教程,自己下载的好像总是不完整,下载包解压后一个没有aapt.e ...

  9. Nodejs之package.json介绍说明

    规范的package.json及package.json中各属性的作用. "name":包名. "description":包简介. "author& ...

  10. composer 安装和修改中国镜像

    参考:http://docs.phpcomposer.com/00-intro.html#Using-Composer http://www.phpcomposer.com/ 下载安装 下载并且运行 ...