UOJ#179. 线性规划(线性规划)
- 描述
- 提交
- 自定义测试
这是一道模板题。
(这个题现在标程挂了。。哪位哥哥愿意提供一下靠谱的标程呀?)
本题中你需要求解一个标准型线性规划:
有 nn 个实数变量 x1,x2,…,xnx1,x2,…,xn 和 mm 条约束,其中第 ii 条约束形如 ∑nj=1aijxj≤bi∑j=1naijxj≤bi。
此外这 nn 个变量需要满足非负性限制,即 xj≥0xj≥0。
在满足上述所有条件的情况下,你需要指定每个变量 xjxj 的取值,使得目标函数 F=∑nj=1cjxjF=∑j=1ncjxj 的值最大。
输入格式
第一行三个正整数 n,m,tn,m,t。其中 t∈{0,1}t∈{0,1}。
第二行有 nn 个整数 c1,c2,⋯,cnc1,c2,⋯,cn,整数间均用一个空格分隔。
接下来 mm 行,每行代表一条约束,其中第 ii 行有 n+1n+1 个整数 ai1,ai2,⋯,ain,biai1,ai2,⋯,ain,bi,整数间均用一个空格分隔。
输出格式
如果不存在满足所有约束的解,仅输出一行 "Infeasible"。
如果对于任意的 MM,都存在一组解使得目标函数的值大于 MM,仅输出一行"Unbounded"。
否则,第一行输出一个实数,表示目标函数的最大值 FF。当第一行与标准答案的相对误差或绝对误差不超过 10−610−6,你的答案被判为正确。
如果 t=1t=1,那么你还需要输出第二行,用空格隔开的 nn 个非负实数,表示此时 x1,x2,…,xnx1,x2,…,xn 的取值,如有多组方案请任意输出其中一个。
判断第二行是否合法时,我们首先检验 F−∑nj=1cjxjF−∑j=1ncjxj 是否为 00,再对于所有 ii,检验 min{0,bi−∑nj=1aijxj}min{0,bi−∑j=1naijxj} 是否为 00。检验时我们会将其中大于 00 的项和不大于 00 的项的绝对值分别相加得到 S+S+ 和 S−S−,如果 S+S+ 和 S−S− 的相对误差或绝对误差不超过 10−610−6,则判为正确。
如果 t=0t=0,或者出现 Infeasible 或 Unbounded 时,不需要输出第二行。
样例一
input
2 2 1 1 1 2 1 6 -1 2 3
output
4.2 1.8 2.4
explanation
两条约束分别为 2x1+x2≤6,−x1+2x2≤32x1+x2≤6,−x1+2x2≤3。
当 x1=1.8,x2=2.4x1=1.8,x2=2.4 时目标函数 x1+x2x1+x2 取到最大值 4.24.2。
样例二
input
2 2 1 1 -1 1 1 4 -1 -2 -2
output
4.0 4.0 0.0
explanation
注意 xj≥0xj≥0 的限制。
样例三
input
3 3 1 0 0 1 -2 1 0 -4 1 1 0 4 1 -2 0 -4
output
Infeasible
样例四
input
2 1 1 0 1 1 0 1
output
Unbounded
限制与约定
对于所有数据,1≤n,m≤201≤n,m≤20,0≤|aij|,|bi|,|cj|≤1000≤|aij|,|bi|,|cj|≤100,t∈{0,1}t∈{0,1}。
本题包含 4 个子任务,每个 25 分。
子任务 1,3 满足 bi≥0bi≥0。
子任务 2,4 没有特殊限制。
子任务 1,2 中 t=0t=0。
子任务 3,4 中 t=1t=1。
时间限制:1s1s
空间限制:256MB256MB
下载
样例数据下载
线性规划貌似在必修五有啊qwq不过还没学到估计也不会讲单纯形算法吧
感觉线性规划是差分约束的升级版??
如果想学的话建议看2016年队爷的论文《浅谈线性规划在信息学竞赛中的应用》
不过为啥A不了啊
#include<cstdio> #include<algorithm> #include<cmath> using namespace std; const int MAXN = 51, INF = 1e9 + 10; const double eps = 1e-8; inline int read() {char c = getchar();int x = 0,f = 1;while(c < '0' || c > '9'){if(c == '-')f = -1;c = getchar();}while(c >= '0' && c <= '9'){x = x * 10 + c - '0',c = getchar();}return x * f; } int N, M, opt; int id[MAXN]; double ans[MAXN], a[MAXN][MAXN]; void Pivot(int l, int e) {swap(id[N + l], id[e]);double t = a[l][e]; a[l][e] = 1;for(int i = 0; i <= N; i++) a[l][i] /= t;//交换基变量与非基变量 for(int i = 0; i <= M; i++) {if(i != l && abs(a[i][e]) > eps) {t = a[i][e]; a[i][e] = 0;//t表示系数 for(int j = 0; j <= N; j++)a[i][j] -= a[l][j] * t;//消去需要消去的非基变量 }}//带入的过程就是消去非基变量 } bool init() {//寻找初始化解,若bi < 0,找到一个ai < 0,转换它们,不断重复直到所有的bi都 > 0//此时x1 = 0, x2 = 0···就是一组解 while(1) {int l = 0, e = 0;for(int i = 1; i <= M; i++) if(a[i][0] < -eps && (!l || (rand() & 1))) l = i;if(!l) break;for(int i = 1; i <= N; i++) if(a[l][i] < -eps && (!e || (rand() & 1))) e = i;if(!e) {puts("Infeasible"); return 0;}//这里所有的Xi都是正的,而bi是负的,这与松弛型相矛盾 Pivot(l, e);}return 1; } bool simplex() {while(1) {int l = 0, e = 0; double mn = INF;for(int i = 1; i <= N; i++)if(a[0][i] > eps) {e = i; break;}if(!e) break;for(int i = 1; i <= M; i++)if(a[i][e] > eps && a[i][0] / a[i][e] < mn)mn = a[i][0] / a[i][e], l = i;//找到下界最紧的松弛 if(!l) {puts("Unbounded"); return 0;}Pivot(l, e);}return 1; } int main() {srand(19260817);N = read(); M = read(); opt = read();for(int i = 1; i <= N; i++) a[0][i] = read();//最大化C1X1 + C2X2··· for(int i = 1; i <= M; i++) {for(int j = 1; j <= N; j++)a[i][j] = read();a[i][0] = read();// <= b }for(int i = 1; i <= N; i++) id[i] = i;if(init() && simplex()) {printf("%.8lf\n", -a[0][0]);if(opt) {for(int i = 1; i <= M; i++) ans[id[i + N]] = a[i][0];//tagfor(int i = 1; i <= N; i++) printf("%.8lf ", ans[i]);}}return 0; } /* 3 3 1 3 1 2 1 1 3 30 2 2 5 24 4 1 2 36 */
UOJ#179. 线性规划(线性规划)相关推荐
- UOJ 179 线性规划
这是一道模板题. 本题中你需要求解一个标准型线性规划: 有n个实数变量x1,x2,⋯,xn和m条约束,其中第i条约束形如aij*xj≤bi ,j∈(1,n),i∈(1,m) 此外这n个变量需要满足非负 ...
- 线性规划之单纯形法【超详解+图解】-转载
线性规划之单纯形法[超详解+图解] 目录 1.作用 2.线性规划的一般形式 5.1几何意义 5.2如何判断最优 5.3如何选择新的基变量 5.4如何选择被替换的基变量 5.5终止条件 标准型: 转化为 ...
- 线性规划之单纯形法【超详解+图解】
1.作用 单纯形法是解决线性规划问题的一个有效的算法.线性规划就是在一组线性约束条件下,求解目标函数最优解的问题. 2.线性规划的一般形式 在约束条件下,寻找目标函数z的最大值. 3.线性规划的可行域 ...
- MATLAB 线性规划实例应用
线性规划 线性规划函数 功能:求解线性规划问题 语法 x = linprog(f,A,b):求解问题 min fx,约束条件为 Ax <= b x = linprog(f,A,b,Aeq,beq ...
- Python数模笔记-PuLP库(1)线性规划入门
1.什么是线性规划 线性规划(Linear programming),在线性等式或不等式约束条件下求解线性目标函数的极值问题,常用于解决资源分配.生产调度和混合问题.例如: max fx = 2*x1 ...
- python 线性规划问题_使用Python进行线性规划示例
运筹学 运筹学是一种科学的决策方法,它通常是在需要分配稀缺资源的条件下,寻求系统的最佳设计.科学的决策方法需要使用一个或多个数学模型(优化模型)来做出最优决策. 优化模型试图在满足给定约束的决策变量的 ...
- 应用运筹学基础:线性规划 (1) - 极点与基可行解
学校有一门课叫<应用运筹学基础>,是计算机学院唯一教优化的课程,感觉上得还行,这里简单记录一下上课学到的知识.第一节课是线性规划(linear programming). 凸集 对于集合 ...
- 线性规划python
线性规划 线性规划(Linear Programming 简记LP)是运筹学的一个重要分支,它起源于工业生产组织管理的决策问题,数学上它用来确定多变量线性函数在变量满足线性约束条件下的最优值.线性规划 ...
- python数学建模(二)线性规划2.实战(思路清晰\过程完整、详细)
文章目录 (一)简单陈述本文章的内容 (二)线性规划例题(实战) 2.1 实战题目 2.2 符号规定和基本假设 2.3 模型的分析 2.4 模型的建立 2.5 模型一的求解和分析 2.5.1 (代码) ...
最新文章
- Springcloud Feign原理
- python 插入排序算法
- 使用LeakTracer检测android NDK C/C++代码中的memory leak
- 产品经理思维模型:用户体验要素
- 【ZOJ - 3715】Kindergarten Election(枚举得票数,贪心)
- oracle 时间集合,oracle 日期函数集合(集中版本)第2/2页
- 艾诺迪亚4一次性完美刷经验刷金钱方法图解[亲测无需闪退游戏]
- python 多维list 排序_一行代码的优雅| Python列表生成式
- 软件测试之缺陷报告的BUG状态
- 将项目绑定https协议
- 实验一 DOS命令解释程序的编写
- 关于算法--蛮力法篇--选择排序
- java环境配置 jcreator
- 杭州雄迈拟召回一万个网络摄像头:被指引发美国网络瘫痪
- AD(altium designer)15原理图与PCB设计教程(五)——工程编译与报表生成
- Pinned Memory 多设备异步拷贝
- 前端开发实战:实现京东购物平台的静态首页
- Kafka的assign和subscribe订阅模式
- 面试必问系列:5、知道多线程吗?谈谈你参与过的多线程实战场景
- [统计学笔记] (十)一元线性回归
热门文章
- SAP IDoc Post不成功,报错 - Conventional invoice verification no longer maintained as of Release 4.6-
- 由游戏中加入“人脸识别”而引发的思考
- 5G时代下,AI赋能行业的思考
- 工作上996,生活上669,并不是什么难事儿!
- 下一代搜索引擎长啥样?Google 给出了TA的答案
- 迁移学习全面指南:概念、项目实战、优势、挑战
- 如何在算法交易中使用AI?摩根大通发布新版指南
- (完美解决)linux服务器安装anaconda并且配置好jupyter从而windows远程访问
- 2型文法:基于预测分析表的自顶向下语法分析
- Science长文综述:通过空间斑图形成避免复杂系统崩溃