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= ...
随机推荐
- DAY2敏捷冲刺
站立式会议 工作安排 (1)服务器配置 (2)数据库连接 (3)页面创意 燃尽图 代码提交记录 感想 林一心:centos配置服务器真的算是一个不小的坑,目前数据库配置清楚,脚本部署好明天测试交互,还 ...
- 认识简单的C
- PHPCMSV9 黄页新闻、产品、商机均无法浏览具体信息,显示您没有访问该信息的权限!
原帖地址:http://bbs.phpcms.cn/forum.php?mod=viewthread&tid=294956&highlight=%C3%BB%D3%D0%B7%C3%C ...
- chrome extensions & debug
chrome extensions & debug debug background.js debug popup.js debug content_script.js chrome.stor ...
- Atom IDE开发工具, ASCII艺术评论, ninimap 插件
1 ASCII Art Comments One neat trick is to use ASCII art to create huge comments visible in the minim ...
- Delphi DBGrid双击事件、单元格操作
1.得到当前格子中的内容:DBGrid1.Fields[DBGrid1.SelectedIndex].DisplayText;把DBGrid1.SelectedIndex改为你所希望引用的字段就可以了 ...
- Tomcat 设计模式分析
门面设计模式 门面设计模式在 Tomcat 中有多处使用,在 Request 和 Response 对象封装中.Standard Wrapper 到 ServletConfig 封装中.Applica ...
- BZOJ 1004 Cards(Burnside引理+DP)
因为有着色数的限制,故使用Burnside引理. 添加一个元置换(1,2,,,n)形成m+1种置换,对于每个置换求出循环节的个数, 每个循环节的长度. 则ans=sigma(f(i))/(m+1) % ...
- Java基础之开关语句详解
switch 语句是单条件多分支的开关语句,它的一般格式定义如下(其中break语句是可选的): switch(表达式) { case 常量值: 若干个语句 break; case 常量值: 若干个 ...
- BZOJ1023:[SHOI2008]仙人掌图——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1023 Description 如果某个无向连通图的任意一条边至多只出现在一条简单回路(simple ...