这两天算法课刚学了这个,于是就想着用C语言自己撸出来。
首先是寻找最优解的过程,对于下标从i到j的矩阵链,我们将其分成两部分i到k和k+1到j,遍历i到j之间的每一个k,找到最小值即可。
为了输出最优解还需要一个二维数组存储矩阵链i~j的截断位置。
这里是c代码:
#include<stdio.h>
#include<stdlib.h>
#define maxSize 1000
#define maxNum 100000000
int dp[maxSize][maxSize];//从i到j相乘所需要的最少计算次数
int memeo[maxSize][maxSize];//储存从i到j在哪里截断
void find(int *numSequence,int n){
int i,j,k,l,tmp;
for(i=0;i<=n;i++){
dp