http://uoj.ac/problem/179

终于写出来了单纯性算法的板子,抄的网上大爷的qwq

辅助线性规划找非基变量时要加个随机化才能A,我也不知道为什么,卡精度吗?

2017-3-6UPD:问了网上的大爷,知道是防止被卡时间(因为单纯形的复杂度是指数级的)。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; const int N = 23;
const double eps = 1e-8; double a[N][N], ans[N];
int n, m, t, id[N << 1]; void pivot(int l, int e) {
swap(id[e], id[n + l]);
double r = a[l][e]; a[l][e] = 1;
for (int j = 0; j <= n; ++j)
a[l][j] /= r;
for (int i = 0; i <= m; ++i)
if (i != l) {
r = a[i][e]; a[i][e] = 0;
for (int j = 0; j <= n; ++j)
a[i][j] -= r * a[l][j];
}
} int main() {
scanf("%d%d%d", &n, &m, &t);
int i, j, l, e; double k, kk;
for (j = 1; j <= n; ++j) scanf("%lf", &a[0][j]), id[j] = j;
for (i = 1; i <= m; ++i) {
for (j = 1; j <= n; ++j)
scanf("%lf", &a[i][j]);
scanf("%lf", &a[i][0]);
} while (true) {
l = e = 0; k = -eps;
for (i = 1; i <= m; ++i)
if (a[i][0] < k) {
k = a[i][0];
l = i;
}
if (!l) break;
k = -eps;
for (j = 1; j <= n; ++j)
if (a[l][j] < k && (!e || (rand() & 1))) {
k = a[l][j];
e = j;
}
if (!e) {puts("Infeasible"); return 0;}
pivot(l, e);
} while (true) {
for (j = 1; j <= n; ++j)
if (a[0][j] > eps)
break;
if ((e = j) > n) break;
k = 1e18; l = 0;
for (i = 1; i <= m; ++i)
if (a[i][e] > eps && (kk = (a[i][0] / a[i][e])) < k) {
k = kk;
l = i;
}
if (!l) {puts("Unbounded"); return 0;}
pivot(l, e);
} printf("%.10lf\n", -a[0][0]);
if (!t) return 0;
for (i = 1; i <= m; ++i) ans[id[n + i]] = a[i][0];
for (i = 1; i <= n; ++i) printf("%.10lf ", ans[i]);
return 0;
}

【UOJ #179】线性规划 单纯形模板的更多相关文章

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

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

  2. UOJ#179. 线性规划[模板]

    传送门 http://uoj.ac/problem/179 震惊,博主竟然还不会线性规划! 单纯形实在学不会啊……背个板子当黑盒用…… 学(chao)了NanoApe dalao的板子 #includ ...

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

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

  4. uoj#179 线性规划

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

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

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

  6. UVA 10498 Happiness(线性规划-单纯形)

    Description Prof. Kaykobad has given Nasa the duty of buying some food for the ACM contestents. Nasa ...

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

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

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

    http://uoj.ac/problem/35 模板题,重新理了一遍关系.看注释吧.充分理解了倍增的意义,翻倍之后对上一次排序的利用是通过一种类似于队列的方式完成的. #include<ios ...

  9. 【UOJ179】线性规划(单纯形)

    题意: 思路:单纯形模板 ..,..]of double; idx,idy,q:..]of longint; c:..]of double; n,m,i,j,op,x,y:longint; eps,m ...

随机推荐

  1. 【bzoj3387-跨栏训练】线段树+dp

    我们可以想到一个dp方程:f[i][0]表示当前在i个栅栏的左端点,f[i][1]表示在右端点. 分两种情况: 第一种:假设现在要更新线段gh的左端点g,而它下来的路径被ef挡住了,那么必定是有ef来 ...

  2. 省队集训 Day6 序列

    [题目大意] 给出$n$个数的序列$a_1, a_2, ..., a_n$,有$m$次操作,为下面三种: $A~l~r~d$:区间$[l,r]$,全部加$d$. $M~l~r~d$:区间$[l,r]$ ...

  3. Spring 路由地址的基本使用

    1.下面是spring的使用基本框架连接 https://www.cnblogs.com/HD/p/4103239.html

  4. quartz的简介

    1. 介绍  Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源的任务调度框架,是完全由java开发的一个开源的任务日程管理系统,“任务进度管理器”就是一个在预 ...

  5. 关于EditText.setText()无法显示的问题

    将EditText在初始化后调用EditText.setSaveEnabled(false); 让Android 系统不保存值,这样就不会恢复了.

  6. 基于ARM 构架(带MMU)的copy_from_user与copy_to_user详细分析

      [转自:http://blog.chinaunix.net/uid-20543672-id-3195249.html]   在学习Linux内核驱动的时候,一开始就会碰到copy_from_use ...

  7. fork与vfork区别

    1. 地址空间各段拷贝: fork: 内核为子进程生成新的地址空间结构,拷贝父进程的代码段,数据空间,堆,栈到自身的地址空间,但注意:子进程的代码段并不会分配物理空间,而是指向父进程的代码段物理空间, ...

  8. 64_l1

    L-function-1.23-18.fc26.i686.rpm 13-Feb-2017 23:19 154562 L-function-1.23-18.fc26.x86_64.rpm 13-Feb- ...

  9. 单文件组件(single-file components)

    介绍 我们可以使用预处理器来构建简洁和功能更丰富的组件,比如 Pug,Babel (with ES2015 modules),和 Stylus.

  10. SRM 638 Div.2

    250 给一个字符串 要求从一种形式换成另一形式 class NamingConvention{ private: int a, b, c; public: int d; string toCamel ...