传送门 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. 线性规划[模板]的更多相关文章

  1. uoj#179 线性规划

    这是一道模板题. 本题中你需要求解一个标准型线性规划: 有nn个实数变量x1,x2,⋯,xnx1,x2,⋯,xn和mm条约束,其中第ii条约束形如∑nj=1aijxj≤bi∑j=1naijxj≤bi. ...

  2. UOJ#179. 线性规划(线性规划)

    描述 提交 自定义测试 这是一道模板题. (这个题现在标程挂了..哪位哥哥愿意提供一下靠谱的标程呀?) 本题中你需要求解一个标准型线性规划: 有 nn 个实数变量 x1,x2,…,xnx1,x2,…, ...

  3. UOJ.179.线性规划(单纯形)

    题目链接 这写得还不错:http://www.cnblogs.com/zzqsblog/p/5457091.html 引入基变量\(x_{i+n}\),将约束\(\sum_{i=1}^m a_{ij} ...

  4. 【UOJ #179】线性规划 单纯形模板

    http://uoj.ac/problem/179 终于写出来了单纯性算法的板子,抄的网上大爷的qwq 辅助线性规划找非基变量时要加个随机化才能A,我也不知道为什么,卡精度吗? 2017-3-6UPD ...

  5. 【UOJ#179】线性规划 单纯形

    题目链接: http://uoj.ac/problem/179 Solution 就是单纯形模板题,这篇博客就是存一下板子. Code #include<iostream> #includ ...

  6. 【UOJ 179】 #179. 线性规划 (单纯形法)

    http://uoj.ac/problem/179 补充那一列修改方法: 对于第i行: $$xi=bi-\sum Aij*xj$$    $$=bi-\sum_{j!=e} Aij*xj-Aie*xe ...

  7. UOJ#34 FFT模板题

    写完上一道题才意识到自己没有在博客里丢过FFT的模板-- 这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞-- 所以我就直 ...

  8. [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]

    后缀数组,解决字符串问题的有利工具,本题代码为倍增SA算法 具体解释详见2009年国家集训队论文 #include <iostream> #include <algorithm> ...

  9. Note -「线性规划」学习笔记

    \(\mathcal{Definition}\)   线性规划(Linear Programming, LP)形式上是对如下问题的描述: \[\operatorname{maximize}~~~~z= ...

随机推荐

  1. 如果jsp表单元素的值为空,如何避免null出现在页面上?

    可以写一个简单的函数对空值进行处理,判断值是否为空,如果是空就返回空字符串.实例代码如下: <%! String blanknull(String s) { return (s == null) ...

  2. 重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改

    膜拜下 Martin Fowler 大神 , 开始学习 圣经 重构-改善既有代码设计 . 代码的坏味道就意味着需要重构, 对代码的坏味道了然于心是重构的比要前提; . 作者 : 万境绝尘 转载请注明出 ...

  3. Coursera-Note: Internet History, Technology and Secure (1st week to 9th week)

    目录 Coursera-Note: Internet History, Technology and Secure 第一周 第二周 数据交换: Packet switching技术: 第三周 创造ht ...

  4. android入门 — PopupWindow

    第一步:自定义xml文件 第二步:获取LayoutInflater对象 第三步:调用inflate()方法获取View对象 第四步:创建PopupWindow对象 第五步:调用PopupWindow的 ...

  5. Zigbee安全基础篇Part.3

    原文地址: https://www.4hou.com/wireless/14294.html 导语:在之前的文章中提供了ZigBee协议及其安全功能的简要概述.在本文中,我们将探讨可在ZigBee网络 ...

  6. Agile.Net 组件式开发平台 - 服务开发示例

    在上一篇文章中已经讲解了组件的开发,这篇文章讲解平台服务开发. Agile.Net开发管理平台项目,已经托管在开源中国码云平台(http://git.oschina.net) 登陆码云平台进入项目主页 ...

  7. linux下清空文件全部内容,如log日志

    在实际操作中经常需要清空log文件, 比如a.log,   有的人说, 直接删除不就行了, 但是, 直接删除后, 没法使用tail -f a.log了. 有的人说, 先rm再touch一个新文件不就可 ...

  8. WebExtensions & tabs.executeScript()

    tabs.executeScript() https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs ...

  9. HTML5拖拽练习

    HTML5提供专门的拖拽与拖放的API,以后实现这类效果就不必乱折腾了 相关属性和事件如下: 1.DataTransfer 对象:退拽对象用来传递的媒介,使用一般为Event.dataTransfer ...

  10. C# 类反射创建对象实例

    object obj= Activator.CreateInstance(Type  type);