用动态规划策略求矩阵链相乘的最小乘法次数及乘法方式C语言

用动态规划策略求矩阵链相乘的最小乘法次数及乘法方式C语言

#include “pch.h”
#include
#include <stdio.h>

const int MAX_N = 100;
const int MAX_INT = 65530;
int C[MAX_N][MAX_N];
int Index_K[MAX_N][MAX_N];
using namespace std;
int main()
{
int N;
int d, i,j,min,k,temp;
scanf("%d", &N);
int mat_L[MAX_N], mat_C[MAX_N];
for (int i = 0; i < N; i++)
{
scanf("%d %d", &mat_L[i], &mat_C[i]);
}
mat_L[N] = mat_C[N-1];
for (int i = 0; i < N; i++)
{
C[i][i] = 0;
}//填充对角线
for (d = 1; d < N ; d++)
{
for (i = 0; i < N - d; i++)
{
j = i + d;
min = 10000;
for (k = i + 1; k < j + 1; k++)
{
temp = C[i][k - 1] + C[k][j] + mat_L[i] * mat_L[k] * mat_L[j + 1];
//printf("%d\n", temp);
if (min > temp)
{
min = temp;
Index_K[i][j] = k;
}
}
C[i][j] = min;
printf(“i= %d ,j=%d : k=%d\n”, i,j, Index_K[i][j]);
}
}
printf("%d", C[0][N-1]);
return 0;
}
测试:
5
5 10
10 4
4 6
6 10
10 2
结果:
i= 0 ,j=1 : k=1
i= 1 ,j=2 : k=2
i= 2 ,j=3 : k=3
i= 3 ,j=4 : k=4
i= 0 ,j=2 : k=2
i= 1 ,j=3 : k=2
i= 2 ,j=4 : k=3
i= 0 ,j=3 : k=3
i= 1 ,j=4 : k=2
i= 0 ,j=4 : k=1
348

猜你喜欢

转载自blog.csdn.net/weixin_43653815/article/details/89957018