• 计算矩阵连乘积(动态规划)


    时限:

    1000ms 内存限制:10000K  总时限:3000ms

    描述:

    在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。计算C=AB总共需要p×q×r次乘法。 现在的问题是,给定n个矩阵{A1,A2,…,An}。其中Ai与Ai+1是可乘的,i=1,2,…,n-1。 要求计算出这n个矩阵的连乘积A1A2…An最少需要多少次乘法。

    输入:

    输入数据的第一行是一个整数n(0 < n <= 10),表示矩阵的个数。 接下来的n行每行两个整数p,q( 0 < p,q < 100),分别表示一个矩阵的行数和列数。

    输出:

    输出一个整数:计算连乘积最少需要乘法的次数。

    输入样例:

    10
    1 2
    2 3
    3 4
    4 5
    5 6
    6 7
    7 8
    8 9
    9 10
    10 11

    输出样例:

    438

    #include<stdio.h>
    int n;//矩阵个数(0~10)
    int p[11];//矩阵维数(n+1)
        
    void Matrix_mult()
    {
        int Arr[11][11],temp;//(a[0][0]不用)a[i][j]存放从矩阵i到矩阵j的最小矩阵乘法数
        int i,j,k;
        int d;//矩阵间隔d
        for(i=1;i<=n;i++)
                Arr[i][i]=0;//第i个矩阵到第i个矩阵乘法数为1
        for(d=1;d<=n-1;d++)//矩阵间隔r//矩阵链长度d+1
        {
            for(i=1;i<=n-d;i++)//i=1..~n-d
            {    j=i+d;//i~i+d构成长度为r+1的矩阵链
                Arr[i][j]=0+Arr[i+1][j]+p[i-1]*p[i]*p[j];//截断位置为i
                for(k=i+1;k<j;k++)//截断位置为k=i+1,i+2.....j-1
                {
                    temp=Arr[i][k]+Arr[k+1][j]+p[i-1]*p[k]*p[j];
                    if(temp<Arr[i][j])
                        Arr[i][j]=temp;//获得从矩阵i到矩阵j的最小矩阵乘法数
                }
            }
        }
        printf("%d\n",Arr[1][n]);//从第1个矩阵到第n个矩阵最小乘法数
    }
    int main()
    {
        int i;
        scanf("%d",&n);//矩阵个数(0~10)    
        int b[10][2];
        for( i=0;i<n;i++)
        {    scanf("%d",&b[i][0]);//第i个矩阵的行数
            scanf("%d",&b[i][1]);//第i个矩阵的列数
        }
                
        for(i=0;i<n;i++)
            p[i]=b[i][0];//存放所有矩阵维数(测例中的1,2,3...10,11)
        p[n]=b[n-1][1];
        Matrix_mult();
        return 0;
    }
  • 相关阅读:
    Qt相关资料收集
    bakefile初试
    Install VirtualBox 2 Guest Additions in Ubuntu
    Qt使用笔记(2)--Qmake的使用
    英语单词词频
    wxWidgets应用--使用方法与技巧连接收藏
    Learning English
    [转贴]深圳八年职场与人生感言
    帮朋友招聘通信类人才!!!!!
    [新闻]华为发布最高端核心路由器NE5000E集群系统
  • 原文地址:https://www.cnblogs.com/IThaitian/p/2586788.html
Copyright © 2020-2023  润新知