Description

这是一道模板题。

本题中你需要求解一个标准型线性规划:

有\(n\)个实数变量\(x_1,x_2,\cdots,x_n\)和\(m\)条约束,其中第\(i\)条约束形如\(\sum_{j=1}^{n}a_{ij}x_{j} \le b_{i}\)。

此外这\(n\)个变量需要满足非负性限制,即\(x_{j}≥0\)。

在满足上述所有条件的情况下,你需要指定每个变量\(x_{j}\)的取值,使得目标函数\(F=\sum^n_{j=1}c_jx_j\)的值最大。

Input

第一行三个正整数 \(n,m,t\)。其中\(t \in {0,1}\)。

第二行有\(n\)个整数\(c_1,c_2,\cdots,c_n\),整数间均用一个空格分隔。

接下来mm行,每行代表一条约束,其中第\(i\)行有\(n+1\)个整数\(a_{i1},a_{i2},\cdots,a_{in},b_{i}\),整数间均用一个空格分隔。

Output

如果不存在满足所有约束的解,仅输出一行"Infeasible"。

如果对于任意的\(M\),都存在一组解使得目标函数的值大于\(M\),仅输出一行"Unbounded"。

否则,第一行输出一个实数,表示目标函数的最大值\(F\)。当第一行与标准答案的相对误差或绝对误差不超过\(10^{−6}\),你的答案被判为正确。

如果\(t=1\),那么你还需要输出第二行,用空格隔开的\(n\)个非负实数,表示此时\(x_{1},x_{2},⋯,x_{n}\)的取值,如有多组方案请任意输出其中一个。

判断第二行是否合法时,我们首先检验\(F−\sum^{n}_{j=1}c_{j}x_j\)是否为\(0\),再对于所有\(i\),检验\(min\{0,b_i−\sum^n_{j=1}a_{ij}x_{j} \}\)是否为\(0\)。检验时我们会将其中大于\(0\)的项和不大于\(0\)的项的绝对值分别相加得到\(S+\)和\(S−\),如果\(S+\)和\(S−\)的相对误差或绝对误差不超过\(10^{−6}\),则判为正确。

如果\(t=0\),或者出现Infeasible或Unbounded时,不需要输出第二行。

Sample Input

2 2 1

1 1

2 1 6

-1 2 3

Sample Output

4.2

1.8 2.4

标准线性规划板子题。

具体做法戳这里

贴份代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std; #define maxn (30)
#define eps (1e-8) int N,M,op,tot,q[maxn],idx[maxn],idy[maxn]; double a[maxn][maxn],A[maxn]; inline void pivot(int x,int y)
{
swap(idy[x],idx[y]);
double tmp = a[x][y]; a[x][y] = 1/a[x][y];
for (int i = 0;i <= N;++i) if (y != i) a[x][i] /= tmp;
tot = 0; for (int i = 0;i <= N;++i) if (i != y&&(a[x][i] > eps||a[x][i] < -eps)) q[++tot] = i;
for (int i = 0;i <= M;++i)
{
if ((x == i)||(a[i][y] < eps&&a[i][y] > -eps)) continue;
for (int j = 1;j <= tot;++j) a[i][q[j]] -= a[x][q[j]]*a[i][y];
a[i][y] = -a[i][y]/tmp;
}
} int main()
{
freopen("179.in","r",stdin);
freopen("179.out","w",stdout);
scanf("%d %d %d",&N,&M,&op); srand(233);
for (int i = 1;i <= N;++i) scanf("%lf",a[0]+i);
for (int i = 1;i <= M;++i)
{
for (int j = 1;j <= N;++j) scanf("%lf",a[i]+j);
scanf("%lf",a[i]); }
for (int i = 1;i <= N;++i) idx[i] = i;
for (int i = 1;i <= M;++i) idy[i] = i+N;
while (true)
{
int x = 0,y = 0;
for (int i = 1;i <= M;++i) if (a[i][0] < -eps&&((!x)||(rand()&1))) x = i; if (!x) break;
for (int i = 1;i <= N;++i) if (a[x][i] < -eps&&((!y)||(rand()&1))) y = i; if (!y) return puts("Infeasible"),0;
pivot(x,y);
}
while (true)
{
int x = 0,y = 0; double mn = 1e15;
for (int i = 1;i <= N;++i) if (a[0][i] > eps) { y = i; break; } if (!y) break;
for (int i = 1;i <= M;++i) if (a[i][y] > eps && a[i][0]/a[i][y] < mn) mn = a[i][0]/a[i][y],x = i; if (!x) return puts("Unbounded"),0;
pivot(x,y);
}
printf("%.8lf\n",-a[0][0]); if (!op) return 0;
for (int i = 1;i <= M;++i) if (idy[i] <= N) A[idy[i]] = a[i][0];
for (int i = 1;i <= N;++i) printf("%.8lf ",A[i]);
fclose(stdin); fclose(stdout);
return 0;
}

UOJ179 线性规划的更多相关文章

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

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

  2. 使用Python scipy linprog 线性规划求最大值或最小值(使用Python学习数学建模笔记)

    函数格式 scipy.optimize.linprog(c, A_ub=None, b_ub=None, A_eq=None, b_eq=None, bounds=None, method='simp ...

  3. java 线性规划 和lingo 比较

    model:max=13*A+ 23*B; 5*A + 15*B <480 ; 4*A + 4 *B <160 ; 35* A + 20 *B <1190 ; end Variabl ...

  4. 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质

    Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...

  5. 用Microsoft.Solver.Foundation进行线性规划,为WPF应用添加智能

    在管理信息系统的开发过程中,往往会涉及到一些线性规划数学模型,例如资源配置优化.微软的Microsoft.Solver.Foundation是一个数学库,可以很好的对线性规划问题进行求解.关于它的细节 ...

  6. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)

    写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...

  7. matlab绘图--线性规划图解法示意

    matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4];  plot(L1(:,1),L1(:,2));hold on  ...

  8. hdu 4091 线性规划

    分析转自:http://blog.csdn.net/dongdongzhang_/article/details/7955136 题意 :  背包能装体积为N,  有两种宝石, 数量无限, 不能切割. ...

  9. 建模算法(一)——线性规划

    一.解决问题 主要是安排现有资源(一定),取得最好的效益的问题解决,而且约束条件都是线性的. 二.数学模型 1.一般数学模型 2.MATLAB数学模型 其中c,x都是列向量,A,Aeq是一个合适的矩阵 ...

随机推荐

  1. lsb_release 提示命令不存在

    1. 报错信息 bash: lsb_release: command not found 2. 问题原因 未安装 lsb_release 命令 3. 解决方法 用 yum 命令安装 lsb_relea ...

  2. iOS之AlertController的使用

    iOS 8的新特性之一就是让接口更有适应性.更灵活,因此许多视图控制器的实现方式发生了巨大的变化.全新的UIPresentationController 在实现视图控制器间的过渡动画效果和自适应设备尺 ...

  3. the forth assignment of software testing

    软件测试用到的 pict33.msi. 加载安装即可. 顺步安装 使用背景: 假如现在有一个网站后台需要测试工程师进行测试用例设计.用常规的方法将参数列出: 帐户名: 空,不存在,超长,超短,正常 密 ...

  4. ecshop在PHP 5.4以上版本各种错误问题处理

    在php5.4版本之后有很多的函数与功能进行丢弃与升级功能了,现在国内很多CMS都还未按php5.4标准来做了,下面我整理了一些在ecshop在PHP 5.4以上版本各种错误问题处理. 1.PHP 5 ...

  5. photoshop 常用快捷键大全

    一.文件新建 CTRL+N打开 CTRL+O 打开为 ALT+CTRL+O关闭 CTRL+W保存 CTRL+S 另存为 CTRL+SHIFT+S另存为网页格式 CTRL+ALT+S打印设置 CTRL+ ...

  6. 重温css系列01

    2016-01-07——解决背景层透明度的问题 需要ie9+ 问题:如果我对div设置opacity: 0.8;这个透明属性后 希望内容不发生改变怎么弄? A:做两层,或者rgba 解决后的效果图: ...

  7. ASP.NET MVC5总结(二)@HTML扩展

    1.@Html.AntiForgeryToken() 用来防止跨站请求伪造(CSRF)攻击的一个措施 2.@Html.ValidationSummary(true) 主要用来 (1). 显示后台 Mo ...

  8. 时间处理总结(二)oracle

    不断总结中................. 1.等于land.djsj=to_date('2016/7/26','yyyy-MM-dd')2.大于等于land.djsj>=to_date('2 ...

  9. C#下如何用NPlot绘制期货股票K线图(2):读取数据文件让K线图自动更新

    [内容介绍]上一篇介绍了K线图的基本绘制方法,但很不完善,本篇增加了它直接读取数据的功能,这对于金融市场的数据量大且又需要动态刷新功能的实现很重要. [实现方法] 1.需要一个数据文件,这里用的是直接 ...

  10. DAG模型——嵌套矩阵

    有向无环图上的动态规划是学习动态规划的基础,很多问题都可以转化为DAG上的最长路.最短路或路径计数问题. 嵌套矩阵 有n个矩阵,每个矩阵可以用两个整数a,b描述,表示它的长和宽.矩阵X(a,b)可以嵌 ...