//动态规划
public class matrixChain1 {
//定义一个存储矩阵维度的数组
static int p[]= {1,2,3,4,5,6,};
static int n=p.length-1;
static int [][]s=new int[n+1][n+1];
static int [][]m=new int [n+1][n+1];
public static void main(String[] args) {
//matrixChain1(p,m,s);
System.out.println(matrixChain1(p,m,s));
Traceback(s,1,2);
}
public static int matrixChain1(int p[],int [][]m,int [][]s) {
int i,j = 0;
int n=p.length-1;
for( i=1;i<=n;i++) {
m[i][i]=0;
}
for(int r=2;r<=n;r++) {
for( i=1;i<=n-r+1;i++) {
j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++) {
int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
if(t<m[i][j]) {
m[i][j]=t;
s[i][j]=k;
}
}
}
}
return m[i][j];
}
//通过递归的方法找到断点,并加括号
private static void Traceback(int[][] s1, int i, int j) {
if(i==j) {
System.out.println("A"+i);
}else {
System.out.println("(");
Traceback(s1,i,s1[i][j]);
Traceback(s1,s1[i][j]+1,j);
System.out.println(")");
}
}
}
矩阵连乘问题(动态规划)--算法设计与分析
最新推荐文章于 2023-02-09 08:00:00 发布