动态规划的矩阵连乘问题
不知道怎么描述,就是找规律,套公式
import java.util.Scanner;
public class 矩阵连乘 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int array[]=new int[n];
int arrayA[][]=new int[n][n];
int arrayB[][]=new int[n][n];
for(int i=0;i<n;i++) {
array[i]=sc.nextInt();
}
int res=solve(array,arrayA,arrayB);
System.out.println("最少乘法次数:"+res);
traceback(arrayB,1,n-1);
}
private static void traceback(int[][] arrayB, int i, int j) {
if(i==j) {
return ;
}
traceback(arrayB,i,arrayB[i][j]);
traceback(arrayB,arrayB[i][j]+1,j);
System.out.println("元素 A"+i+","+arrayB[i][j]+"和元素A"+(arrayB[i][j]+1)+","+j);
}
private static int solve(int[] array, int[][] arrayA,int arrayB[][]) {
int n=array.length-1;
for(int i=1;i<=n;i++) {
arrayA[i][i]=0;//对角线设置为0
}
for(int r=2;r<=n;r++) {//r控制的是行数,用来协调i和j
for(int i=1;i<=n-r+1;i++) {
int j=r+i-1;//j最小从2开始
arrayA[i][j]=arrayA[i+1][j]+array[i-1]*array[i]*array[j];
arrayB[i][j]=i;
for(int k=i+1;k<j;k++) {
int t=arrayA[i][k]+arrayA[k+1][j]+array[i-1]*array[k]*array[j];
if(t<arrayA[i][j]) {
arrayA[i][j]=t;
arrayB[i][j]=k;
}
}
}
}
return arrayA[1][n];
}
}