话不多说,直接代码:
void MatrixChain(int *p, int n, int m[][maxn], int s[][maxn])
{
int i, j, k, r, t;
for(i = 1; i <= n; i++)
m[i][i] = 0;
for(r = 2; r <= n; r++)
for(i = 1; i <= n-r+1; i++)
{
j = i+r-1;
m[i][j] = m[i+1][j] + p[i-1]*p[i]*p[j];
s[i][j] = i;
for(k = i+1; k < j; k++)
{
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;
}
}
}
}
算法复杂度分析:
算法matrixChain的主要计算量取决于算法中对