线性规划 单纯形

求解线性规划最优解问题(全部转化成约束条件<=(非负条件可以是>=),并且求最大值问题)

bzoj1061 志愿者招募

题目大意:给定n天,每天需要志愿者ai人;m类志愿者,从si~ti天工作,每人要ci元。求最小费用。

思路:根据题意可以列出目标函数是min sigma(i=1~m)cixi,约束条件是 sigma(i=1~m)Aijxi>=aj(j=1~n)(Aij表示这一天志愿者能否工作),xi>=0。这个问题如果*-1转化的话,可能要求解辅助约束。所以可以用对偶问题来解决,目标函数是min sigma(i=1~n)aiyi,约束条件是sigma(i=1~n)Aijyi>=cj(j=1~m),yi>=0,然后就可以求解了。pivot是转轴过程,相当于把xl约束中的xe提到左边,同时代入其他的约束和目标函数。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1005
#define M 10005
#define LD double
#define eps 1e-9
#define inf 1e10
using namespace std;
LD a[M][N],b[M],c[M];
int n,m;LD v;
int cmp(LD x,LD y){
    if (x-y>eps) return 1;
    if (y-x>eps) return -1;
    return 0;}
void pivot(int l,int e){
    int i,j;
    b[l]/=a[l][e];
    for (i=1;i<=n;++i)
      if (i!=e) a[l][i]/=a[l][e];
    a[l][e]=1./a[l][e];
    for (i=1;i<=m;++i)
        if (i!=l&&cmp(a[i][e],eps)!=0){
            b[i]-=a[i][e]*b[l];
            for (j=1;j<=n;++j)
                if (j!=e) a[i][j]-=a[i][e]*a[l][j];
            a[i][e]=-a[i][e]*a[l][e];}
    v+=c[e]*b[l];
    for (i=1;i<=n;++i)
      if (i!=e) c[i]-=a[l][i]*c[e];
    c[e]=-a[l][e]*c[e];}
LD simplex(){
    int i,j,l,e;LD del;
    while(true){
        for (i=1;i<=n;++i) if (c[i]>eps) break;
        if (i>n) return v;
        del=inf;e=i;
        for (i=1;i<=m;++i)
            if (a[i][e]>eps&&del>b[i]/a[i][e]){
                del=b[i]/a[i][e];l=i;
            }
        if (cmp(del,inf)==0) return inf;
        else pivot(l,e);
    }}
int main(){
    int i,j,s,t,cc;scanf("%d%d",&n,&m);
    for (i=1;i<=n;++i) scanf("%lf",&c[i]);
    for (i=1;i<=m;++i){
        scanf("%d%d%lf",&s,&t,&b[i]);
        for (j=s;j<=t;++j) a[i][j]=1.;
    }printf("%.0f\n",simplex());
}

时间: 2024-08-28 03:51:27

线性规划 单纯形的相关文章

BZOJ3112 [ZJOI2013]防守战线

Description 战线可以看作一个长度为 n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第 i号位置上建一座塔有 Ci 的花费,且一个位置可以建任意多的塔费用累加计算.有 m个区间[L1, R1], [L2, R2], -, [Lm, Rm],在第 i 个区间的范围内要建至少 Di座塔.求最少花费. Input 第一行为两个数n,m. 接下来一行,有 n个数,描述 C数组. 接下来 m行,每行三个数 Li,Ri,Di,描述一个区间. Output 仅包含一行,一个数,为最少花费.

山东大学《运筹学》课程课件

教材:刁在筠,刘桂真,宿洁,马建华.<运筹学>,第三版,高等教育出版社,2007. ch01 - 绪论.pptx ch02-1 - 线性规划 - 模型与基本定理.pptx ch02-2 - 线性规划 - 单纯形算法.pptx ch02-3 - 线性规划 - 两阶段单纯形算法.pptx ch02-4 - 线性规划 - 对偶理论.pptx ch02-5 - 线性规划 - 灵敏度分析.pptx ch02-6 - 线性规划 - 计算软件和复杂性.pptx ch03-1 - 整数规划 - 割平面法.pp

分享《自然语言处理理论与实战》PDF及代码+唐聃+《深入浅出Python机器学习》PDF及代码+段小手+《深度学习实践:计算机视觉》PDF+缪鹏+《最优化理论与算法第2版》高清PDF+习题解答PDF+《推荐系统与深度学习》PDF及代码学习

<自然语言处理理论与实战>高清PDF,362页,带书签目录,文字可以复制:配套源代码.唐聃等著. <大数据智能互联网时代的机器学习和自然语言处理技术>PDF,293页,带书签目录,文字可以复制,彩色配图.刘知远等著.  下载: https://pan.baidu.com/s/1waP6C086-32_Lv0Du3BbNw 提取码: 1ctr <自然语言处理理论与实战>讲述自然语言处理相关学科知识和理论基础,并介绍使用这些知识的应用和工具,以及如何在实际环境中使用它们.由

《深入浅出Python机器学习(段小手)》PDF代码+《推荐系统与深度学习》PDF及代码+《自然语言处理理论与实战(唐聃)》PDF代码源程序

<深入浅出Python机器学习>PDF,280页,带书签目录,文字可以复制:配套源代码. 作者:段小手 下载: https://pan.baidu.com/s/1XUs-94n0qKR1F9rS8KNLHw 提取码: dv74 <深入浅出Python机器学习>内容涵盖了有监督学习.无监督学习.模型优化.自然语言处理等机器学习领域所必须掌握的知识,从内容结构上非常注重知识的实用性和可操作性. <深入浅出Python机器学习>采用由浅入深.循序渐进的讲授方式,完全遵循和尊重

深度学习数学《矩阵分析与应用第2版》资料+《最优化理论与算法第2版》电子书资料+《人工智能一种现代的方法第3版》资料学习

理性模型的建模和算法,经验模型的决策建模和算法,构成了目前人工智能的基础,基于学习反馈的模型构成了它的进化.学习人工智能,必须有较好的数学基础. <矩阵分析与应用第2版>电子书中总结了大量线性代数的知识,是一本很不错的书,数学专业可以跳过,主要是给工科生用的.归纳了不少论文中的解法,是做信号处理的一本很不错的工具书,建议认真学习,做电子笔记,对书的重点内容要好好研究. <矩阵分析与应用第2版>系统.全面地介绍矩阵分析的主要理论.具有代表性的方法及一些典型应用,包括矩阵代数基础.特殊

线性规划(Simplex单纯形)与对偶问题

线性规划 首先一般所有的线性规划问题我们都可以转换成如下标准型: 但是我们可以发现上面都是不等式,而我们计算中更希望是等式,所以我们引入这个新的概念:松弛型: 很显然我们最后要求是所有的约束左边的变量都不小于0.而求解这类问题,我们又有一套十分便利的模型算法:单纯形 基变量:松弛型等式左边的所有变量 非基变量:松弛型等式右侧的所有变量 基本解:一组基变量和非基变量蕴含着一组基本解,即所有的非基变量都为0,基变量都为等式右侧的常数项(这里要求常数项为正,为负时我们后面讨论) 算法原理: 可证线性规

线性规划与单纯形算法描述

\end{align}" /> 在满足(2).(3)式约束条件时求解(1)式最大值的问题称为线性规划问题 线性规划的形式多样,但都可以转化成上述的形式,上面的形式被称为线性规划的标准型 标准型的矩阵形式: 同样在满足除(1)式之外所有其他式约束条件时求解(1)式最大值(后面相似的式子也是这样理解,不再作说明) 下面引用自算法导论: 考虑下面具有两个变量的线性规划: x_1+x_2\protect\4x_1-x_2\leq 8\protect\2x_1+x_2\leq 10\protect\

[线性规划 对偶原理 单纯形] BZOJ 3265 志愿者招募加强版

就是个裸题了 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> #define cl(x) memset(x,0,sizeof(x)) using namespace std; typedef long long ll; inline char nc() { static char buf[100000],*p1=buf,*p2=buf; if (p1==p2)

线性规划初探

看完<算法导论>肯定会写单纯形 因为单纯形不仅好写而且<算法导论>里讲的很清楚 附赠uoj179的模板一个 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #include<stdlib.h> 7 8 using namespace std; 9 const