#include <stdio.h>
struct matrix {
int row;
int column;
};
int m[200][200];
void dynamicPlanning(struct matrix* arr, int n);
int main()
{
int n;
scanf_s("%d", &n);
if (n > 100) {
printf("the maximum of matrices' number is 100");
}
else if (n>0 && n<=100)
{
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
m[i][j] = 2147483647;
}
}
struct matrix arrayMatrix[100];
for (int i = 0; i < n; i++) {
scanf_s("%d %d", &arrayMatrix[i].row, &arrayMatrix[i].column);
}
dynamicPlanning(arrayMatrix, n);
printf("%d", m[0][n-1]);
}
else
{
printf("error number");
}
return(0);
}
void dynamicPlanning(struct matrix* arr, int n) {
int i, j, mn = 0;
for (i = 0; i < n; i++) {
m[i][i] = 0;
}
for (mn = 1; mn < n; mn++) {
for (i = 0; i < n-mn; i++) {
int j = i + mn;
for (int slice = i; slice < j; slice++) {
int value = m[i][slice] + m[slice + 1][j]
+ arr[i].row * arr[slice+1].row * arr[j].column;
if (value < m[i][j]) {
m[i][j] = value;
}
}
}
}
}
动态规划,矩阵连乘
最新推荐文章于 2024-10-05 12:07:50 发布