装配站问题(动态规划)

#include<stdio.h> using namespace std; int t[3][10]; int f[3][10]; int a[3][10]; int l[3][10]; int e1,e2,x1,x2; int n,s,l1; void Print() { int k=l1; printf("line %d,station %d/n",k,n); for(int i=n;i>=2;i--) { k=l[k][i]; printf("line %d,station %d/n",k,i-1); } } int main() { while(scanf("%d",&n)!=EOF) { scanf("%d%d",&e1,&e2); for(int i=1;i<=n;i++) scanf("%d%d",&a[1][i],&a[2][i]); for(int i=1;i<=n-1;i++) scanf("%d%d",&t[1][i],&t[2][i]); scanf("%d%d",&x1,&x2); f[1][1]=e1+a[1][1]; f[2][1]=e2+a[2][1]; for(int i=2;i<=n;i++) { if(f[1][i-1]>f[2][i-1]+t[2][i-1]) { f[1][i]=f[2][i-1]+t[2][i-1]+a[1][i]; l[1][i]=2; } else { f[1][i]=f[1][i-1]+a[1][i]; l[1][i]=1; } if(f[2][i-1]>f[1][i-1]+t[1][i-1]) { f[2][i]=f[1][i-1]+t[1][i-1]+a[2][i]; l[2][i]=1; } else { f[2][i]=f[2][i-1]+a[2][i]; l[2][i]=2; } } if(f[1][n]+x1<=f[2][n]+x2) { s=f[1][n]+x1; l1=1; } else { s=f[2][n]+x2; l1=2; } printf("%d/n",s); Print(); } return 0; }

你可能感兴趣的:(装配站问题(动态规划))