UOJ197 线性规划
传送门
由于这道题标程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 线性规划的更多相关文章
- 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)
函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...
- 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 ...
- 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质
Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...
- 用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能
在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化.微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解.关于它的细节 ...
- 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)
写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...
- matlab绘图--线性规划图解法示意
matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4]; plot(L1(:,1),L1(:,2));hold on ...
- hdu 4091 线性规划
分析转自:http://blog.csdn.net/dongdongzhang_/article/details/7955136 题意 : 背包能装体积为N, 有两种宝石, 数量无限, 不能切割. ...
- 建模算法(一)——线性规划
一.解决问题 主要是安排现有资源(一定),取得最好的效益的问题解决,而且约束条件都是线性的. 二.数学模型 1.一般数学模型 2.MATLAB数学模型 其中c,x都是列向量,A,Aeq是一个合适的矩阵 ...
- UVA 10498 Happiness(线性规划-单纯形)
Description Prof. Kaykobad has given Nasa the duty of buying some food for the ACM contestents. Nasa ...
随机推荐
- 第一节 :Windows 平台安装 MongoDB
MongoDB 下载 下载地址:https://www.mongodb.com/download-center#community 安装到C盘根目录下 创建数据目录 MongoDB将数据目录存储在 d ...
- Ubuntu新建用户组
新建用户组 sudo addgroup groupname 把现有用户加入新建的用户组 sudo adduser username groupname
- VS2015 Bad Request解决方法
新获取的项目,使用vs2015启动项目,遇到只能用localhost:xxxx的方式访问,使用192.168.**.**:xxxx这样ip+端口的方式无法访问的情况 原因:vs没有做出相应的配置 解决 ...
- 【leetcode】1022. Smallest Integer Divisible by K
题目如下: Given a positive integer K, you need find the smallest positive integer N such that N is divis ...
- 【leetcode】1021. Best Sightseeing Pair
题目如下: Given an array A of positive integers, A[i]represents the value of the i-th sightseeing spot, ...
- flutter页面布局三
RaisedButton 为了实现今天的效果,在认识Wrap组件之前,先认识一下flutter中的按钮组件,Flutter 中通过 RaisedButton 定义一个按钮. import 'packa ...
- eclipse项目(java project)如何导入jar包的解决方案列表?
右键项目-properties-java build path(左侧菜单)-选择libraries 有两种方式,导入jar包实际上就是建立一种链接,并不是copy式的导入 一.导入外部包,add ex ...
- T-SQL 创建触发器 禁止插入空值
---假设在SQL SERVER 2005里面有一张表,其中有两个字段需要做唯一性约束, ---不能有重复值,但是允许其为空值,如果都是空值,则允许重复 CREATE TRIGGER [dbo].[i ...
- shallow update not allowed
! [remote rejected] master -> master (shallow update not allowed) https://stackoverflow.com/quest ...
- C#后台将string="23.00"转换成int类型
在C# 后台将String类型转换成int 有以下几种方法: (1) int.TryParse(string); (2) Convert.Toint32(string); (3) (int)stri ...