装配线调度:
1 #include <iostream> 2 #include <cstdio> 3 4 using namespace std; 5 6 int main() 7 { 8 int e1,e2,x1,x2,a1[7],a2[7]; 9 int f[2][7],fe,le,l[2][7],t1[7],t2[7]; 10 scanf("%d%d",&e1,&e2); 11 scanf("%d%d",&x1,&x2); 12 for(int i=1;i<=6;i++) 13 scanf("%d",&a1[i]); 14 for(int i=1;i<=6;i++) 15 scanf("%d",&a2[i]); 16 for(int i=1;i<=5;i++) 17 scanf("%d",&t1[i]); 18 for(int i=1;i<=5;i++) 19 scanf("%d",&t2[i]); 20 f[1][1]=e1+a1[1]; 21 f[2][1]=e2+a2[1]; 22 23 for(int j=2;j<=6;j++) 24 { 25 if(f[1][j-1]+a1[j]<=f[2][j-1]+t2[j-1]+a1[j]) 26 { 27 f[1][j]=f[1][j-1]+a1[j]; 28 l[1][j]=1; 29 } 30 else 31 { 32 f[1][j]=f[2][j-1]+t2[j-1]+a1[j]; 33 l[1][j]=2; 34 } 35 36 if(f[2][j-1]+a2[j]<=f[1][j-1]+t1[j-1]+a2[j]) 37 { 38 f[2][j]=f[2][j-1]+a2[j]; 39 l[2][j]=2; 40 } 41 else 42 { 43 f[2][j]=f[1][j-1]+t1[j-1]+a2[j]; 44 l[2][j]=1; 45 } 46 } 47 if(f[1][6]+x1<=f[2][6]+x2) 48 { 49 fe=f[1][6]+x1; 50 le=1; 51 } 52 else 53 { 54 fe=f[2][6]+x2; 55 le=2; 56 } 57 58 printf("%d\n",fe); 59 60 int i=le; 61 printf("print line %d,station %d\n",i,6); 62 for(int j=6;j>=2;j--) 63 { 64 i=l[i][j]; 65 printf("print line %d,station %d\n",i,j-1); 66 } 67 return 0; 68 }
源码实现
矩阵链乘法
1 #include <iostream> 2 #include <cstdio> 3 #define inf 1e9 4 using namespace std; 5 int s[7][7]; 6 void print_optimal_parens(int i,int j) 7 { 8 if(i==j) 9 printf("A%d",i); 10 else 11 { 12 printf("("); 13 print_optimal_parens(i,s[i][j]); 14 print_optimal_parens(s[i][j]+1,j); 15 printf(")"); 16 } 17 18 } 19 20 int main() 21 { 22 int p[7]; 23 for(int i=0;i<=6;i++) 24 scanf("%d",&p[i]); 25 26 int m[7][7]; 27 for(int i=1;i<=6;i++) 28 m[i][i]=0; 29 for(int l=2;l<=6;l++) 30 { 31 for(int i=1;i<=6-l+1;i++) 32 { 33 int j=i+l-1; 34 m[i][j]=inf; 35 for(int k=i;k<=j-1;k++) 36 { 37 int q=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j]; 38 if(q<m[i][j]) 39 { 40 m[i][j]=q; 41 s[i][j]=k; 42 } 43 } 44 } 45 } 46 printf("%d\n",m[1][6]); 47 48 print_optimal_parens(1,6); 49 return 0; 50 }
时间: 2024-10-24 06:59:55