import java.util.Scanner;publicclassJuZheng{publicvoidprintResult(int[] arrayMatrix){int length = arrayMatrix.length;//有length个数,可知有length - 1个矩阵long[][] dp =newlong[length][length];//dp[0][i]和dp[i][0]均为0,无意义long sum;for(int len =2;len < length;len++){//依次计算len个矩阵相乘的最小结果,即dp[1][len]for(int i =1, j = len;j < length;i++, j++){//此层循环用于计算dp[i][j]值,即矩阵中对角线的元素值long min = Long.MAX_VALUE;for(int k = i;k < j;k++){//此层循环,用于找到dp[i][j]的最小值
sum = dp[i][k]+ dp[k +1][j]+ arrayMatrix[i -1]* arrayMatrix[k]* arrayMatrix[j];if(min > sum)
min = sum;}
dp[i][j]= min;}}//输出最终结果
System.out.println(dp[1][length -1]);return;}publicstaticvoidmain(String[] args){
JuZheng test =newJuZheng();
Scanner in =newScanner(System.in);int n = in.nextInt();if(n <=1|| n >1000)return;int[] arrayMatrix =newint[n +1];for(int i =0;i <= n;i++)
arrayMatrix[i]= in.nextInt();
test.printResult(arrayMatrix);}}
样例输入
矩阵相乘
23210-111-3031231
样例输出
-32-82
import java.util.Scanner;publicclassJuzhen{publicstaticvoidmain(String[] args){
Scanner scanner =newScanner(System.in);int m =0, s =0, n =0;if(scanner.hasNext()){//输入m,s,n
m = scanner.nextInt();
s = scanner.nextInt();
n = scanner.nextInt();}//定义两个矩阵,行列数分别为m,s与s,nint arr1[][]=newint[m][s];int arr2[][]=newint[s][n];for(int i =0; i < m ; i ++){//输入第一个矩阵for(int j =0; j < s ; j++){if(scanner.hasNext()){
arr1[i][j]= scanner.nextInt();}}}for(int i =0; i < s ; i++){//输入第二个矩阵for(int j =0; j < n ; j++){if(scanner.hasNext()){
arr2[i][j]= scanner.nextInt();}}}int arr[][]=newint[m][n];//定义一个相乘后的矩阵,矩阵的行数与列数为m,nfor(int i =0; i < m ; i++){//进行矩阵相乘for(int j =0; j < n ; j++){for(int x =0; x < s ; x ++){//arr[i][j] = arr1[i][1] * arr2[1][j] + ... + arr1[i][s-1] * arr2[s-1][j]
arr[i][j]+= arr1[i][x]* arr2[x][j];}
System.out.print(arr[i][j]+" ");}
System.out.println();}}}