UOJ#179. 线性规划[模板]
传送门 http://uoj.ac/problem/179
震惊,博主竟然还不会线性规划!
单纯形实在学不会啊……背个板子当黑盒用……
学(chao)了NanoApe dalao的板子
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const double eps=1e-;
const int mxn=;
int read(){
int x=,f=;char ch=getchar();
while(ch<'' || ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>='' && ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
} int n,m,t;
double c[mxn];
double a[mxn][mxn];
int idx[mxn],idy[mxn];
int st[mxn],top=;
void Pivot(int x,int y){//用idy代换idx
swap(idy[x],idx[y]);
double tmp=a[x][y];a[x][y]=/a[x][y];
int i,j;top=;
for(i=;i<=n;i++)if(y!=i)a[x][i]/=tmp;
for(i=;i<=n;i++)if((y!=i) && fabs(a[x][i])>eps)st[++top]=i;
for(i=;i<=m;i++){
if((i==x)||(fabs(a[i][y])<eps))continue;
for(j=;j<=top;j++)a[i][st[j]]-=a[x][st[j]]*a[i][y];
a[i][y]=-a[i][y]/tmp;
}
return;
}
void Simplex(){
int i,j;
while(){
int x=,y=;double mn=1e15;
for(i=;i<=n;i++)if(a[][i]>eps){y=i;break;}
if(!y)break;
for(i=;i<=m;i++){
if(a[i][y]>eps && (a[i][]/a[i][y]<mn)){
mn=a[i][]/a[i][y];
x=i;
}
}
if(!x){printf("Unbounded\n");exit();}
Pivot(x,y);
}
return;
}
int main(){
int i,j;
n=read();m=read();t=read();
for(i=;i<=n;i++)a[][i]=read();//目标函数
for(i=;i<=m;i++){
for(j=;j<=n;j++)a[i][j]=read();
a[i][]=read();
}
for(i=;i<=n;i++)idx[i]=i;//基变量
for(i=;i<=m;i++)idy[i]=i+n;//非基变量
while(){
int x=,y=;
for(i=;i<=m;i++)if(a[i][]<-eps && ((!x)||(rand()&)))x=i;
if(!x)break;
for(i=;i<=n;i++)if(a[x][i]<-eps && ((!y)||(rand()&)))y=i;
if(!y){printf("Infeasible\n");return ;}
Pivot(x,y);
}
Simplex();
printf("%.8f\n",-a[][]);
if(!t)return ;
for(i=;i<=n;i++)a[][i]=;
for(i=;i<=m;i++)if(idy[i]<=n)a[][idy[i]]=a[i][];
for(i=;i<=n;i++)printf("%.8f ",a[][i]);puts("");
return ;
}
UOJ#179. 线性规划[模板]的更多相关文章
- uoj#179 线性规划
这是一道模板题. 本题中你需要求解一个标准型线性规划: 有nn个实数变量x1,x2,⋯,xnx1,x2,⋯,xn和mm条约束,其中第ii条约束形如∑nj=1aijxj≤bi∑j=1naijxj≤bi. ...
- UOJ#179. 线性规划(线性规划)
描述 提交 自定义测试 这是一道模板题. (这个题现在标程挂了..哪位哥哥愿意提供一下靠谱的标程呀?) 本题中你需要求解一个标准型线性规划: 有 nn 个实数变量 x1,x2,…,xnx1,x2,…, ...
- UOJ.179.线性规划(单纯形)
题目链接 这写得还不错:http://www.cnblogs.com/zzqsblog/p/5457091.html 引入基变量\(x_{i+n}\),将约束\(\sum_{i=1}^m a_{ij} ...
- 【UOJ #179】线性规划 单纯形模板
http://uoj.ac/problem/179 终于写出来了单纯性算法的板子,抄的网上大爷的qwq 辅助线性规划找非基变量时要加个随机化才能A,我也不知道为什么,卡精度吗? 2017-3-6UPD ...
- 【UOJ#179】线性规划 单纯形
题目链接: http://uoj.ac/problem/179 Solution 就是单纯形模板题,这篇博客就是存一下板子. Code #include<iostream> #includ ...
- 【UOJ 179】 #179. 线性规划 (单纯形法)
http://uoj.ac/problem/179 补充那一列修改方法: 对于第i行: $$xi=bi-\sum Aij*xj$$ $$=bi-\sum_{j!=e} Aij*xj-Aie*xe ...
- UOJ#34 FFT模板题
写完上一道题才意识到自己没有在博客里丢过FFT的模板-- 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞-- 所以我就直 ...
- [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]
后缀数组,解决字符串问题的有利工具,本题代码为倍增SA算法 具体解释详见2009年国家集训队论文 #include <iostream> #include <algorithm> ...
- Note -「线性规划」学习笔记
\(\mathcal{Definition}\) 线性规划(Linear Programming, LP)形式上是对如下问题的描述: \[\operatorname{maximize}~~~~z= ...
随机推荐
- unity像素贪吃蛇
[ 星 辰 · 别 礼 ] 设计过程: 首先,在之前玩坏控制台做的那个c#贪吃蛇之后,我以为做unity会很简单,但事实比较不如人意...拖了好几天.因为过程中遇到一些问题 蛇身的移动,还是用列表,将 ...
- Swift-元祖
1.元组是多个值组合而成的复合值.元组中的值可以是任意类型,而且每一个元素的类型可以是不同的. let http404Error = (,"Not Found") print(ht ...
- iOS开发allocWithZone介绍
首先我们知道,我们需要保证单例类只有一个唯一的实例,而平时我们在初始化一个对象的时候, [[Class alloc] init],其实是做了两件事. alloc 给对象分配内存空间,init是对对象的 ...
- sql server 带输入输出参数的分页存储过程(效率最高)
create procedure proc_page_withtopmax( @pageIndex int,--页索引 @pageSize int,--每页显示数 @pageCount int out ...
- 浅述Try {} Catch{} 作用
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test ...
- WPF 分页控件的实现 -用户控件
效果图:
- WPF DataGrid的使用
构造数据: using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sy ...
- 【Python】python文件名和文件路径操作
Readme: 在日常工作中,我们常常涉及到有关文件名和文件路径的操作,在python里的os标准模块为我们提供了文件操作的各类函数,本文将分别介绍“获得当前路径”“获得当前路径下的所有文件和文件夹, ...
- 【bzoj2272】[Usaco2011 Feb]Cowlphabet 奶牛文字 dp
题目描述 Like all bovines, Farmer John's cows speak the peculiar 'Cow'language. Like so many languages, ...
- 进程间通讯-3(Manager)-实现数据的同时修改
Manager 可以实现列表,字典,变量,锁,信号量,事件等的数据之间的共享.Manager已经默认加锁了.控制数据不会乱. 实现了不同进程之间数据的共享,并且可以同时修改. from multipr ...