void martixchain(int *p, int n, int **m, int **s)
{
for (int i = 1; i <= n; i++) //m[i][j]表示A[i:j]所需要的最小数乘次数,自己乘自己为0
m[i][i] = 0;
for (int r = 1; r <= n; r++) //控制i和j的距离
{
for (int i = 1; i <=n-r:i++ )
j = i + r; //注意不要让j的访问过界
m[i][j] = m[i + 1][j] + p[i - 1] * p[i] * p[j]; //先给m[i][j]赋一个值
s[i][j] = i; //s[i][j]记录断点位置
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;
}
}
}
}