矩阵连乘(动态规划)
作者:
高歌猛进
,
2024-08-03 22:20:17
,
所有人可见
,
阅读 8
#include<stdio.h>
#define max 100
int r[max];
int m[max][max];
int com[max][max];
int couse(int n){
int x,i,j,k,t;
for(i=1;i<=n;i++){
m[i][i] = 0;
com[i][i] =0;
}
for(x=2;x<=n;x++){
for(i=1;i<=n-x+1;i++){
j = i+x-1;
m[i][j] = m[i][i] + m[i+1][j] + r[i]*r[i+1]*r[j+1];
com[i][j] = i;
for(k=i+1;k<j;k++){
t = m[i][k] + m[k+1][j] + r[i]*r[k+1]*r[j+1];
if(t < m[i][j]){
m[i][j] = t;
com[i][j] = k;
}
}
}
}
return m[1][n];
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n+1;i++)
scanf("%d",&r[i]);
printf("%d",couse(n));
}