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 ...
随机推荐
- 快速失败(fail—fast)和 安全失败(fail—safe)
快速失败(fail-fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的结构进行了修改(增加.删除),则会抛出Concurrent Modification Exception. 原理 ...
- noteone
- JSP中获取客户端或浏览端信息的方式
request应用:在JSP页面显示访问者IP 方式一:纯前台,不涉及后台操作.直接在jsp页面中需要显示IP的地方使用 代码:<%=request.getRemoteAddr()%> ...
- [CSP-S模拟测试]:kill(二分答案+贪心)
题目传送门(内部题50) 输入格式 第一行包含四个整数$n,m,s$,表示人数.怪物数及任务交付点的位置.第二行包含$n$个整数$p_1,p_2,...,p_n$.第三行包含$n$个整数$q_1,q_ ...
- Linux系统结构 详解
Linux系统一般有4个主要部分: 内核.shell.文件系统和应用程序.内核.shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序.管理文件并使用系统.部分层次结构如图1-1所 ...
- error C2664: “ATL::CStringT<BaseType,StringTraits>::Remove”: 不能将参数 1 从“const char [2]”转换为“char”
转自VC错误:http://www.vcerror.com/?p=1395 问题描述: 代码: CString str("asdfafda"); str.Remove(" ...
- jQuery-resize和scroll的性能优化
## 下面是进行测试和研究怎么实现的用的 Document 改变页面大小试试 Document 滚动滚动条试试
- Linux随笔 - linux 多个会话同时执行命令后history记录不全的解决方案【转载】
基本认识linux默认配置是当打开一个shell终端后,执行的所有命令均不会写入到~/.bash_history文件中,只有当前用户退出后才会写入,这期间发生的所有命令其它终端是感知不到的. 问题场景 ...
- Maximum of lines in a DataBand
Hello! I have a problem.I have a DataBand, but I need it to grow only up to 14 lines. If it is beyon ...
- js另存为、打印、属性、加入收藏、关闭等代码
js打开代码 <input name=Button onClick=document.all.WebBrowser.ExecWB(1,1) type=button value=打开> &l ...