首页 > 试题广场 >

利用动态规划计算以下矩阵连乘:A1(20*25)、A2(25

[单选题]
利用动态规划计算以下矩阵连乘:A1(20*25)、A2(25*5)、A3(5*15)、A4(15*10)、A5(10*20)、A6(20*25)
  • (A1A2)(((A3A4)A5)A6)
  • (A1A2A3)((A4A5)A6)
  • (((A1((A2A3)A4))A5)A6)
  • (A1A2)((A3(A4A5))A6)
矩阵A(m*n)和B(n*k)的乘法运算次数为:m*n*k;连乘次数最小选A
选项 连乘次数
A.(A1A2)(((A3A4)A5)A6)=20*25*5(A1A2)+ 5*15*10(A3A4)+ 5*10*20+5*20*25+ 20*5*25= 9250
B.(A1A2A3)((A4A5)A6) 22000
C.(((A1((A2A3)A4))A5)A6) 26375
D.(A1A2)((A3(A4A5))A6) 12000


编辑于 2019-06-21 15:02:51 回复(0)
import java.util.Scanner;
public class MainTest{
    public static void main(String[] args){
        int n;//一共有多少个矩阵
        Scanner scan = new Scanner(System.in);
        n = scan.nextInt();
        //存放矩阵的行数和列数
        int[] p= new int[n+1];//矩阵A1的行数和列数是p0,p1,以此类推
        Scanner in = new Scanner(System.in);
        for(int i = 0;i<p.length;i++){
            p[i] = in.nextInt();
        }
        //然后开始填表
        int[][] m = new int[n+1][n+1];//m[i][j]表示i矩阵到j矩阵最少的乘法次数
        int[][] s = new int[n+1][n+1];//s[i][j]表示i矩阵到j矩阵从哪个地方画括号
        for(int i = 1; i <= n; i++){
            for(int j = 1;j<=n;j++){
                if(i == j){
                    m[i][j]=0;//比如说m[1][1],矩阵1到矩阵1,一个矩阵没法乘,所以乘法次数为0
                }
            }
        }
        for(int r = 2;r<=n;r++){
            for(int k = 1;k <= n-r+1;k++){
                int g =  k+r-1;
                m[k][g] = m[k+1][g] + p[k-1]*p[k]*p[g];//纵向
                //算每个对角线。m[1][2] = m[2][2]+p0*p1*p2;隐藏了m[1][1]
                //m[1][3] = m[2][3] + p0*p2*p3;//隐藏了m[1][1];
                //m[2][4] = m[3][4] + p2*p3*p4隐藏了m[2][2];
                s[k][g] = k;//分割位置
                for(int b = k+1;b<g;b++){//横向
                    int t = m[k][b]+m[b+1][g]+p[k-1]*p[b]*p[g];
                    if(t < m[k][g]){
                        m[k][g] = t;
                        s[k][g] = b;
                    }
                }
            }
        }
        //System.out.println(m[1][n]);
        for(int i = 1;i<=n;i++){
            for(int j = 1;j<=n;j++){
                System.out.print(s[i][j]+" ");
            }
            System.out.println();
        }
    }
}

发表于 2022-11-01 18:06:52 回复(0)
没看懂,望大神解析
发表于 2019-08-14 11:17:58 回复(0)