传送门

由于这道题标程GG了所以必不可能AC嘛2333

单纯形法是一个很玄学的东西qwq

就是 非标准型 -> 标准型 -> 规范型 -> 松弛型

一个玄学操作——转轴操作(privot)

等着学习笔记到时候再补吧先把程序放出来

写了一些注释方便理解qwq

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<cmath>
  5. #include<ctime>
  6. #define inf 20021225
  7. #define ll long long
  8. #define db double
  9. #define eps 1e-8
  10. using namespace std;
  11. db ans[51],a[51][51];int id[51];int n,m,t;
  12. void privot(int x,int y)
  13. {
  14. swap(id[n+x],id[y]);
  15. // 把基变量和非基变量只交换编号
  16. // 相当于 id[n+x] x∈(1,m) 存基变量的编号
  17. db tmp=1.0/a[x][y];
  18. a[x][y]=1.0;// 原先基变量系数为1
  19. for(int i=0;i<=n;i++) a[x][i]*=tmp;
  20. // 非基变量化基变量系数化一 类似解方程代入法之前的系数化一
  21. for(int i=0;i<=m;i++)
  22. {
  23. if(i==x||abs(a[i][y])<eps) continue;
  24. db cur=a[i][y]; a[i][y]=0.0;
  25. for(int j=0;j<=n;j++)
  26. a[i][j]-=a[x][j]*cur;
  27. }
  28. // 利用新的基变量消元
  29. }
  30. bool prework()
  31. {
  32. // 规范型线性规划要求b[i]非负 但是标准型没有这个要求 所以需要预处理
  33. // 把所有b[i]是负的随机匹配几个a[i]是负的然后替换一下 b[i]就变成正的了
  34. while(1)
  35. {
  36. int x=0,y=0,i;
  37. for(i=1;i<=m;i++) if(a[i][0]<-eps && (!x || rand()&1)) x=i;
  38. if(!x) return true;
  39. for(i=1;i<=n;i++) if(a[x][i]<-eps && (!y || rand()&1)) y=i;
  40. if(!y){printf("Infeasible\n");return false;}//只能取负数无可行域
  41. privot(x,y);
  42. }
  43. return true;
  44. }
  45. bool simplex()
  46. {
  47. while(1)
  48. {
  49. int i,x=0,y=0; double mn=1e15;
  50. for(i=1;i<=n;i++) if(a[0][i]>eps){y=i;break;}
  51. // 找一个目标系数>0的
  52. if(!y) break;
  53. for(i=1;i<=m;i++)
  54. if(a[i][y]>eps&&a[i][0]/a[i][y]<mn)
  55. mn=a[i][0]/a[i][y],x=i;
  56. // 找限制最严格的
  57. if(!x){printf("Unbounded\n");return false;}
  58. // 没有限制直接上天(划)无穷大
  59. privot(x,y);
  60. }
  61. return true;
  62. }
  63. int main()
  64. {
  65. srand(time(0));
  66. scanf("%d%d%d",&n,&m,&t);
  67. for(int i=1;i<=n;i++) scanf("%lf",&a[0][i]),id[i]=i;
  68. //初始非基变量i 基变量n+i
  69. for(int i=1;i<=m;i++)
  70. {
  71. for(int j=1;j<=n;j++) scanf("%lf",&a[i][j]);
  72. scanf("%lf",&a[i][0]);
  73. }
  74. if(prework()&&simplex())
  75. {
  76. printf("%.8lf\n",-a[0][0]);
  77. if(t)
  78. {
  79. for(int i=1;i<=m;i++) ans[id[n+i]]=a[i][0];
  80. for(int i=1;i<=n;i++) printf("%.8lf ",ans[i]);
  81. }
  82. }
  83. return 0;
  84. }

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

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

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

  2. 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 ...

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

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

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

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

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

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

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

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

  7. hdu 4091 线性规划

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

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

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

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

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

随机推荐

  1. python py文件转换成exe

    1.首先学会了最简单的方法 1)pip install pyinstaller  安装pyinstall 2)pyinstaller  aaaa.py 转换,会在当前目录下建两个文件夹,其中一个文件夹 ...

  2. SpringBoot JSON文件读取

    @Componentpublic class StepExecutor implements Runnable { @Value("classpath:menu.json") pr ...

  3. Raspbian 在虚拟机上运行,运行Flask,供宿主机访问

    Raspbian 在虚拟机上运行,启动Flask,供宿主机访问 参考ref 1, 在virtualbox上跑起来Raspbian OS 参考ref 2, 在Raspbian上安装并运行Falsk, 注 ...

  4. 【Java】字符串转json

    import org.json.JSONObject; JSONObject jo = new JSONObject(new String(需要转换的字符串));

  5. 八、条件变量std::condition_variable、wait()、notify_one()、notify_all(粗略)

    一.std::condition_variable 用在多线程中. 线程A:等待一个条件满足 线程B:专门在消息队列中扔消息,线程B触发了这个条件,A就满足条件了,可以继续执行 std::condit ...

  6. nIce 不看会后悔的o!

    今天小编来跟大家探讨关于“控件”.控件非常好玩,可以构建出不同的场景和不同风格的Windows画面.相信大家绝对狠感兴趣是吧~~~   好了,下面小编就为大家来展示风采喽 下面先为大家展示一些比较基础 ...

  7. 20175213 2018-2019-2 《Java程序设计》第11周学习总结

    教材学习内容总结 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对象的应用程序称作客户端程序 U ...

  8. 左手Mongodb右手Redis 通过python连接mongodb

    首先需要安装第三方包pymongo pip install pymongodb """ 通过python连接mongodb数据库 首先需要初始化数据库连接 "& ...

  9. SQL:REGEXP

    作为一个更为复杂的示例,正则表达式B[an]*s匹配下述字符串中的任何一个:Bananas,Baaaaas,Bs,以及以B开始.以s结束.并在其中包含任意数目a或n字符的任何其他字符串. 以下是可用于 ...

  10. Hive date_add 和 date_diff 函数

    date_add 函数 例子:date_add('day',-1,current_date) date_diff 函数 例子:date_diff('day',cast(a.dt1 as timesta ...