传送门

由于这道题标程GG了所以必不可能AC嘛2333

单纯形法是一个很玄学的东西qwq

就是 非标准型 -> 标准型 -> 规范型 -> 松弛型

一个玄学操作——转轴操作(privot)

等着学习笔记到时候再补吧先把程序放出来

写了一些注释方便理解qwq

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<ctime>
#define inf 20021225
#define ll long long
#define db double
#define eps 1e-8
using namespace std; db ans[51],a[51][51];int id[51];int n,m,t; void privot(int x,int y)
{
swap(id[n+x],id[y]);
// 把基变量和非基变量只交换编号
// 相当于 id[n+x] x∈(1,m) 存基变量的编号
db tmp=1.0/a[x][y];
a[x][y]=1.0;// 原先基变量系数为1
for(int i=0;i<=n;i++) a[x][i]*=tmp;
// 非基变量化基变量系数化一 类似解方程代入法之前的系数化一
for(int i=0;i<=m;i++)
{
if(i==x||abs(a[i][y])<eps) continue;
db cur=a[i][y]; a[i][y]=0.0;
for(int j=0;j<=n;j++)
a[i][j]-=a[x][j]*cur;
}
// 利用新的基变量消元
} bool prework()
{
// 规范型线性规划要求b[i]非负 但是标准型没有这个要求 所以需要预处理
// 把所有b[i]是负的随机匹配几个a[i]是负的然后替换一下 b[i]就变成正的了
while(1)
{
int x=0,y=0,i;
for(i=1;i<=m;i++) if(a[i][0]<-eps && (!x || rand()&1)) x=i;
if(!x) return true;
for(i=1;i<=n;i++) if(a[x][i]<-eps && (!y || rand()&1)) y=i;
if(!y){printf("Infeasible\n");return false;}//只能取负数无可行域
privot(x,y);
}
return true;
} bool simplex()
{
while(1)
{
int i,x=0,y=0; double mn=1e15;
for(i=1;i<=n;i++) if(a[0][i]>eps){y=i;break;}
// 找一个目标系数>0的
if(!y) break;
for(i=1;i<=m;i++)
if(a[i][y]>eps&&a[i][0]/a[i][y]<mn)
mn=a[i][0]/a[i][y],x=i;
// 找限制最严格的
if(!x){printf("Unbounded\n");return false;}
// 没有限制直接上天(划)无穷大
privot(x,y);
}
return true;
} int main()
{
srand(time(0));
scanf("%d%d%d",&n,&m,&t);
for(int i=1;i<=n;i++) scanf("%lf",&a[0][i]),id[i]=i;
//初始非基变量i 基变量n+i
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]);
scanf("%lf",&a[i][0]);
}
if(prework()&&simplex())
{
printf("%.8lf\n",-a[0][0]);
if(t)
{
for(int i=1;i<=m;i++) ans[id[n+i]]=a[i][0];
for(int i=1;i<=n;i++) printf("%.8lf ",ans[i]);
}
}
return 0;
}

UOJ197 线性规划的更多相关文章

  1. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  2. java 线性规划 和lingo 比较

    model:max=13*A+ 23*B; 5*A + 15*B <480 ; 4*A + 4 *B <160 ; 35* A + 20 *B <1190 ; end Variabl ...

  3. 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质

    Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...

  4. 用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能

    在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化.微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解.关于它的细节 ...

  5. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)

    写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...

  6. matlab绘图--线性规划图解法示意

    matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4];  plot(L1(:,1),L1(:,2));hold on  ...

  7. hdu 4091 线性规划

    分析转自:http://blog.csdn.net/dongdongzhang_/article/details/7955136 题意 :  背包能装体积为N,  有两种宝石, 数量无限, 不能切割. ...

  8. 建模算法(一)——线性规划

    一.解决问题 主要是安排现有资源(一定),取得最好的效益的问题解决,而且约束条件都是线性的. 二.数学模型 1.一般数学模型 2.MATLAB数学模型 其中c,x都是列向量,A,Aeq是一个合适的矩阵 ...

  9. UVA 10498 Happiness(线性规划-单纯形)

    Description Prof. Kaykobad has given Nasa the duty of buying some food for the ACM contestents. Nasa ...

随机推荐

  1. wait与sleep区别?

    wait与sleep区别? 对于sleep()方法,该方法是属于Thread类中的.而wait()方法,则是属于Object类中的. sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线 ...

  2. jquery对象中 “冒号” 详解

      冒号  可以理解为 “匹配” 或 “选取”的意思.   $(":button") 表示匹配所有的按钮.$("input:checked")表示匹配所有选中的 ...

  3. C#基础提升系列——C#异步编程

    C#异步编程 关于异步的概述,这里引用MSDN的一段文字: 异步编程是一项关键技术,使得能够简单处理多个核心上的阻塞 I/O 和并发操作. 如果需要 I/O 绑定(例如从网络请求数据或访问数据库),则 ...

  4. python2和python3同时存在电脑时,安装包时的的命令行

    若是在Python2中使用pip操作时,用pip2或是pip2.7相关命令. 例:给Python2安装selenium,在cmd中输入 pip2 install selenium 或是 pip2.7 ...

  5. android android studio error

    SIMPLE: Error computing //cmake 包含的跨平台头文件或者是源文件路径出错

  6. python不能运行

    运行python文件出现,报错please select a valid interpreter 这是因为没有选择interpreter  就是更改目录时需要重新选择pytho解析器 解决方法如下 更 ...

  7. ps示例

    博客PS示例 一显示指定真正用户名(RUID)或用户ID的进程 打开另外一个终端 [root@centos72 ~]# id wang uid=1000(wang) gid=1000(wang) gr ...

  8. 新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!

    <阿里巴巴Java开发手册>是阿里内部Java工程师所遵循的开发规范,涵盖编程规约.单元测试规约.异常日志规约.MySQL规约.工程规约.安全规约等,这是近万名阿里Java技术精英的经验总 ...

  9. XSS漏洞基础

    什么是XSS? XSS全程Cross-site scripting,跨站脚本攻击.恶意攻击者往Web页面里插入html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用 ...

  10. Delphi ListView的用法

    //增加 i := ListView1.Items.Count; with ListView1 do begin ListItem:=Items.Add; ListItem.Caption:= Int ...