挑战程序设计竞赛(算法和数据结构)——11.4矩阵连乘法的JAVA实现
Posted 小乖乖的臭坏坏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——11.4矩阵连乘法的JAVA实现相关的知识,希望对你有一定的参考价值。
题目:
讲解:
import java.util.Scanner;
public class MatrixChainMultiplication
public static void main(String[] args)
Scanner cin = new Scanner(System.in);
int n = cin.nextInt();//有多少个矩阵
int[] a = new int[n+1];//存边长
for (int i=0;i<n;i++)
int x = cin.nextInt();
int y = cin.nextInt();
a[i] = x;
if(i==n-1)a[n] = y;
int print_num = matrixChainMultiplication(a);
System.out.println(print_num);
public static int matrixChainMultiplication(int [] a)
int n = a.length-1;//矩阵个数
int[][] m = new int[n+1][n+1];//DP记录矩阵
//初始化动规矩阵
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if(i>=j)m[i][j] = 0;
elsem[i][j] = Integer.MAX_VALUE;
for (int i=1;i<n;i++)m[i][i+1] = a[i-1]*a[i]*a[i+1];
//遍历顺序
for (int l=2;l<=n-1;l++)//这两句循环的顺序千万不能搞错,调了2天的bug了。否则遍历顺序不同
for (int i=1;i<=n-2;i++)
int j = i+l;
if(j<=n)//如果越界就不用作操作了
for (int k=i;k<=j-1;k++)//计算操作
m[i][j] = Math.min(m[i][j], m[i][k] +m[k+1][j] + a[i-1]*a[k]*a[j]);
return m[1][n];
输入:
6
30 35
35 15
15 5
5 10
10 20
20 25
输出:
15125
以上是关于挑战程序设计竞赛(算法和数据结构)——11.4矩阵连乘法的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章
挑战程序设计竞赛(算法和数据结构)——12.4广度优先搜索的JAVA实现
挑战程序设计竞赛(算法和数据结构)——15.1所有点对间的最短路径(Floyd算法)的JAVA实现
挑战程序设计竞赛(算法和数据结构)——15.5最小生成树(Kruskal算法)的JAVA实现
挑战程序设计竞赛(算法和数据结构)——分割(下)&快速排序的JAVA实现