动态规划的步骤:
动态规划的特征:
矩阵连乘:
#define NUM 51
int p[NUM];
int m[NUM][NUM];
int s[NUM][NUM];
void MatrixChain (int n)
{
for (int i=1; i<=n; i++) m[i][i] = 0;
for (int r=2; r<=n; r++)
for (int i=1; i<=n-r+1; i++)
{
int j=i+r-1;
//计算初值,从i处断开
m[i][j] = m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j] = i;
for (int k=i+1; k<j; k++)
{
int t = m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if (t < m[i][j]) {
m[i][j] = t; s[i][j] = k;}
}
}
}
算法4.2计算矩阵连乘积最优解的递归算法
void TraceBack(int i, int j)
{
if(i==j) printf("A%d", i);
else
{
printf("(");
TraceBack(i,s[i][j]);
TraceBack(s[i][j]+1,j);
printf(")");
}
}
动态规划算法的基本要素:
算法4.3 计算矩阵连乘积的递归算法
int Recurve(int i, int j)
{
if (i == j) return 0;
int u = Recurve(i, i