线性规划初探
2016-07-10 21:24
253 查看
看完《算法导论》肯定会写单纯形
因为单纯形不仅好写而且《算法导论》里讲的很清楚
附赠uoj179的模板一个
3112
因为单纯形不仅好写而且《算法导论》里讲的很清楚
附赠uoj179的模板一个
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<stdlib.h> using namespace std; const double eps=1e-9; double a[1010][10010]; int n,m; int dcmp(double x) { if (fabs(x)<=eps) return 0; if (x>0) return 1; else return -1; } void pivot(int x,int y) { double k=a[x][y]; a[x][y]=1; for (int i=0; i<=n; i++) a[x][i]/=k; for (int i=0; i<=m; i++) if (i!=x&&dcmp(a[i][y])!=0) { k=a[i][y]; a[i][y]=0; a[i][0]+=(i?-1:1)*k*a[x][0]; for (int j=1; j<=n; j++) a[i][j]-=k*a[x][j]; } } void simplex() { while (1) { int x=0,y=0; for (int i=1; i<=n; i++) if (dcmp(a[0][i])>0) {y=i;break;} if (!y) break; double mi=1e20; for (int i=1; i<=m; i++) if (dcmp(a[i][y])>0&&(!x||mi>a[i][0]/a[i][y])) {x=i; mi=a[i][0]/a[i][y];} if (!x) break; pivot(x,y); } } int main() { scanf("%d%d",&m,&n); for (int i=1; i<=m; i++) scanf("%lf",&a[i][0]); for (int i=1; i<=n; i++) { int l,r,d; scanf("%d%d%d",&l,&r,&d); for (int j=l; j<=r; j++) a[j][i]=1; a[0][i]=d; } simplex(); printf("%d\n",(int)a[0][0]); return 0; }
3112
相关文章推荐
- MongoDB权限管理
- 《leetCode》:Binary Tree Paths
- 乐乐音乐-KSC歌词图片生成器
- 丑数
- Ext初学
- TCP链接中主动断开链接netstat观察可能出现的状态流转是:----腾讯2016研发工程师在线模拟笔试题
- 中国剩余定理 互质与非互质版本
- 嵌入式开发第二日(man 手册、linux基本命令、vim编辑器、代码编译过程、编译工具、基本数据类型、控制流)
- spark shell 启动出错问题
- 什么是语义化标签?
- 【usaco 2013 feb Bronze】计算周长
- JVM性能调优jps、jstack、jmap、jhat、jstat、hprof命令详解
- 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 arr 相同 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn
- Hello World
- BZOJ 1798 [Ahoi2009]Seq 维护序列seq
- 一个互联网研发团队的标准配置
- 一个互联网研发团队的标准配置
- 一个互联网研发团队的标准配置
- Oracle Database 创建HR模式
- 树的直径