uva-10498-线性规划
来源:互联网 发布:征服者更新用什么网络 编辑:程序博客网 时间:2024/06/01 20:41
题目大意:标准的线性规划,m个约束条件都是小于等于;
题目解析:单纯形法模板;
AC代码:
#include <iostream>#include <cstdio>#include <cmath>using namespace std;const double dinf=1e10;const int MAX=55;int n,m,B[MAX],N[MAX];double A[MAX][MAX],b[MAX],c[MAX],v;double ans[MAX];int sgn(double x){ if(x>1e-8) return 1; if(x<-1e-8) return -1; return 0;}void init(){ int i,j; for(i=1;i<=n;i++) N[i]=i; for(i=1;i<=m;i++) B[i]=n+i; v=0;}void pivot(int l,int e){ int i,j; double temp=A[l][e]; b[l]/=temp; A[l][e]=1/temp; for(i=1;i<=n;i++) if(i!=e) A[l][i]/=temp; for(i=1;i<=m;i++) if(i!=l) { b[i]-=A[i][e]*b[l]; for(j=1;j<=n;j++) if(j!=e) A[i][j]-=A[i][e]*A[l][j]; A[i][e]=-A[i][e]/temp; } v+=b[l]*c[e]; for(i=1;i<=n;i++) if(i!=e) c[i]-=c[e]*A[l][i]; c[e]*=-A[l][e]; swap(B[l],N[e]);}void simplex(){ int i,j,k,x; int l,s; double temp,temp1,temp2,temp3; while(1) { temp2=-dinf; s=-1; for(i=1;i<=n;i++) if(sgn(c[i])>0) { temp=dinf; for(k=1;k<=m;k++) if(sgn(A[k][i])>0) { temp3=b[k]/A[k][i]; if(temp3<temp) temp=temp3,x=k; } if(temp2<temp*c[i]) { s=i,l=x,temp2=temp*c[i]; } } if(s==-1) break; pivot(l,s); } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) if(B[j]==i) break; if(j<=m) ans[i]=b[j]; else ans[i]=0; }}int main(){ while(scanf("%d%d",&n,&m)!=-1) { int i,j; for(i=1;i<=n;i++) scanf("%lf",&c[i]); for(i=1;i<=m;i++) { for(j=1;j<=n;j++) scanf("%lf",&A[i][j]); scanf("%lf",&b[i]); } init(); simplex(); printf("Nasa can spend %.0lf taka.\n",ceil(v*m)); } return 0;}
阅读全文
0 0
- UVA 10498 Happiness! 线性规划
- uva-10498-线性规划
- UVa 10498 Happiness! (线性规划)
- uva 11971 - Polygon(线性规划)
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- 线性规划
- XZ_iOS之Runtime使用运行时交换方法
- Android中把bean类集合储存到本地文件中的工具类
- mysql数据库替换表字段包含的某内容
- ActiveMQ集群的安装配置
- iOS MPMoviePlayerController 简介
- uva-10498-线性规划
- ElasticSearch优化的一些方法 些方法
- 各种数据类型的取值范围
- Android 背景图片重复平铺 Background repeat
- 深度拷贝、浅度拷贝、数组的拷贝
- PDB文件:每个开发人员都必须知道的
- 20个不可思议的 WebGL 示例和演示
- position跟display、margin collapse、overflow、float这些特性相互叠加后会怎么样?
- 一只萌新的linux体验13