[关闭]
@y20070316 2017-03-10T10:26:54.000000Z 字数 888 阅读 904

单纯形

OI 专题练习



常见的转化

(1)Minimize->Maximize的系数取反,求最大值,对答案取反。
(2)a=b
(3)变量本身的约束
:设,则
:设,则
无限制:设,则
(4)对偶原理
下列两组线性规划的最优解相同。


题目总览

【bzoj1061】志愿者招募

实现小结:一定要明确行向量、列向量以及矩形的大小。

  1. void Pivot(int l,int e) {
  2. c[l]/=a[l][e];
  3. F(j,1,n) if (j!=e)
  4. a[l][j]/=a[l][e];
  5. a[l][e]=1/a[l][e];
  6. F(i,1,m) if (i!=l&&a[i][e]!=0) {
  7. c[i]=c[i]-a[i][e]*c[l];
  8. F(j,1,n) if (j!=e)
  9. a[i][j]=a[i][j]-a[i][e]*a[l][j];
  10. a[i][e]=0-a[i][e]*a[l][e];
  11. }
  12. res=res+b[e]*c[l];
  13. F(j,1,n) if (j!=e)
  14. b[j]=b[j]-b[e]*a[l][j];
  15. b[e]=0-b[e]*a[l][e];
  16. }
  17. void Simplex(void) {
  18. F(t,1,INF) {
  19. int e=0;
  20. F(i,1,n)
  21. if (b[i]>0) {
  22. e=i;
  23. break;
  24. }
  25. if (!e) break;
  26. double mn=INF; int l=0;
  27. F(i,1,m)
  28. if (a[i][e]>0&&c[i]/a[i][e]<mn) {
  29. mn=c[i]/a[i][e];
  30. l=i;
  31. }
  32. if (mn==INF) {
  33. res=INF;
  34. return;
  35. }
  36. Pivot(l,e);
  37. }
  38. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注