挑战程序设计竞赛(算法和数据结构)——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实现

挑战程序设计竞赛(算法和数据结构)——19.2九宫格拼图问题的JAVA实现

挑战程序设计竞赛(算法和数据结构)——7.1归并排序JAVA实现