#include <cstdio>
#include <cstring>
#define maxn 101
#define minc(a, b) (a) > (b) ? (b) : (a)
#define INF 1 << 29
int c[maxn][maxn], m[maxn];
int n;
int main() {
memset(c, 0, sizeof(c));
freopen("8.chainMatrixMultiplication.txt", "r", stdin);
scanf("%d", &n);
for(int i = 0; i <= n; i++) {
scanf("%d", &m[i]);
}
for(int l = 2; l <= n; l++) {
for(int i = 0; i < n-l + 1; i++) {
int j = i + l - 1;
c[i][j] = INF;
for(int k = i; k < j; k++) {
int q = c[i][k] + c[k+1][j] + m[i] * m[k+1] * m[j+1];
if(q < c[i][j]) {
c[i][j] = q;
}
}
}
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
printf("%-4d ", c[i][j]);
}
printf("\n");
}
printf("%d", c[0][n-1]);
return 0;
}
- 输入数据
- 运行结果