算法导论 动态规划入门之装配线调度问题

来源:互联网 发布:js循环遍历json对象 编辑:程序博客网 时间:2024/05/16 08:04

问题:略

#includeusing namespace std;int main(){ int n; cin>>n; //装配线上装配站的个数 int t1[50],t2[50]; //每种装配线上装配站耗费的时间 int i,j,f1[50],f2[50]; for(i=1;i<=n;++i) cin>>t1[i]; for(j=1;j<=n;++j) cin>>t2[j]; int e1,e2,x1,x2; //进入与离开的时间 cin>>e1>>e2>>x1>>x2; int jump1[50],jump2[50]; //从一装配线跳入下一装配线的时间 for(i=1;i>jump1[i]; for(j=1;j>jump2[j]; int fasttime; int bestline[1][50]; void fastway(int e1,int e2,int t1[],int t2[],int jump1[],int jump2[],int f1[],int f2[],int n,int bestline [][50]); fastway(e1,e2,t1,t2,jump1,jump2,f1,f2,n,bestline); if(f1[n]+x1<=f2[n]+x2) { fasttime=f1[n]+x1; cout<<fasttime; } else { fasttime=f2[n]+x2; cout<<fasttime; } void print(int best[][50]); print(bestline); system("pause"); return 0;} void fastway(int e1,int e2,int t1[],int t2[],int jump1[],int jump2[],int f1[],int f2[],int n,int bestline[][50]) { f1[1]=t1[1]+e1; f2[1]=t2[1]+e2; for(int m=2;m<=n;++m) { if(f1[m-1]+t1[m]<=f2[m-1]+jump2[m-1]+t1[m]) { f1[m]=f1[m-1]+t1[m]; bestline[1][m]=1; } else { f1[m]=f2[m-1]+jump2[m-1]+t1[m]; bestline[1][m]=2; } if(f2[m-1]+t2[m]<=f1[m-1]+jump1[m-1]+t2[m]) { f2[m]=f2[m-1]+t2[m]; bestline[2][m]=2; } else { f2[m]=f1[m-1]+jump1[m-1]+t2[m]; bestline[2][m]=1; } }} void print(int bestline[][50]) { int n=6,i=1; cout<<"station ="<<n<<" line="<<1<=2;--p) { i=bestline[i][p]; cout<<"station ="<<p-1<<" line="<<i<<endl; } }

分析最优子结构,递归迭代来求解
原创粉丝点击