#include<stdio.h>
int c[20][20];
void prin(int i,int j) {
if (i == j) {
printf("A%d", i);
return;
}
else {
printf("(");
prin( i, c[i][j]);
prin( c[i][j] + 1,j);
printf(")");
}
}
int main(void) {
int p[20];
int m[20][20];
int n;
scanf_s("%d", &n);
int i;
for (i = 0; i <= n; i++) {
m[i][i] = 0;
scanf_s("%d", &p[i]);
}
int l;
for (l = 2; l <= n; l++) {
for (i = 1; i <= n - l + 1; i++) {
int k;
int j = i + l - 1;
m[i][j] = 100000;
for (k = i; k <= j - 1; k++) {
int q = m[i][k] + m[k + 1][j] + p[i - 1] * p[k] * p[j];
if (m[i][j]> q) {
m[i][j] =q;
c[i][j] = k;
}
}
}
}
printf("%d %d %d", c[1][6],c[1][2],c[2][3]);
prin(1, n);
}
矩阵链乘法问题
最新推荐文章于 2023-02-09 08:00:00 发布