码迷,mamicode.com
首页 > 编程语言 > 详细

算法导论 动态规划

时间:2016-05-06 00:37:14      阅读:211      评论:0      收藏:0      [点我收藏+]

标签:

装配线调度:

技术分享
 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 }
View Code

 

算法导论 动态规划

标签:

原文地址:http://www.cnblogs.com/do-it-best/p/5463667.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!