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= ...
随机推荐
- android入门 — ListView
ListView主要是用来解决大量数据展示的问题,它的用途很广泛,几乎所有的app都会用到,比如说知乎.今日头条.微博.通讯录等. ListView允许用户通过上下滑动的方式将屏幕外的数据滚动到屏幕中 ...
- iOS- UIScrollView、UIPageControl分页浏览图片
1.先介绍下UIScrollView的常见属性 @property(nonatomic) CGPoint contentOffset; // 记录UIScrollView滚动的位置 @property ...
- TCP系列05—连接管理—4、TCP连接的ISN、连接建立超时及TCP的长短连接
一.TCP连接的ISN 之前我们说过初始建立TCP连接的时候的系列号(ISN)是随机选择的,那么这个系列号为什么不采用一个固定的值呢?主要有两方面的原因 防止同一个连接的不同实例(di ...
- JS DOM视频相关的知识
1.实现点击a标签改变图片时,如果a的href属性有一个目标网址,但是点击又必须跳转到另外一张图,往往会最后跳转到目标网址,可以在onclick事件函数中加入ruturn false,阻止跳转到页面. ...
- OSI参考模型和TCP/IP参考模型
- Bootstrap 轮播图的使用和理解
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 【题解】JXOI2017颜色
一眼线段树...显然,我们可以考虑最后所留下的区间,那显然这个区间中应当不能存在任何与区间外相同的颜色.这里的转化也是很常用的,我们用 \(nxt[i]\) 表示与 \(i\) 颜色相同的下一个位置在 ...
- 我的ACM参赛故事
从我接触程序竞赛到现在应该有十多年了,单说ACM竞赛,从第一次非正式参赛到现在也差不多有7年多的样子.有太多的故事,想说的话,却一直没能有机会写下来.一方面是自己忙,一方面也是自己懒.所以很感谢能有人 ...
- AOJ.176 两数组最短距离 (乱搞题)
两数组最短距离 点我挑战题目 题意分析 给出2个数组,让求出2个数组元素差的绝对值的最小值是多少. 我这里是o(m+n)的算法.首先对于第一个数组,让他的第一个元素和第二个元素比较,如果他的第一个元素 ...
- ContestHunter暑假欢乐赛 SRM 02
惨不忍睹 3个小时都干了些什么... 日常按顺序从A题开始(难度居然又不是递增的 第一眼A题就觉得很简单...写到一半才发现woc那是个环.感觉一下子复杂了,按照链的方法扩展的话要特判很多东西... ...