• dp-矩阵连乘



    参考:http://blog.csdn.net/liufeng_king/article/details/8497607


    使用备忘录算法复杂度降至O(n^3)

    #include<stdio.h>
    //A1 30*35 A2 35*15 A3 15*5 A4 5*10 A5 10*20 A6 20*25
    //p[0-6]={30,35,15,5,10,20,25}
    //m为备忘录,s为断开位置
    
    //递归
    int lookupchain(int i,int j,int p[],int m[][7],int s[][7])
    {
        if(m[i][j]>0)
            return m[i][j];
        if(i==j)
            return 0;
    
        int ans=lookupchain(i+1,j,p,m,s)+p[i-1]*p[i]*p[j];
        s[i][j]=i;
        for(int k=i+1;k<j;k++)
        {
            int  t=lookupchain(i,k,p,m,s)+lookupchain(k+1,j,p,m,s)+p[i-1]*p[k]*p[j];
            if(t<ans)
            {
                ans=t;
                s[i][j]=k;
            }
        }
        m[i][j]=ans;
        return ans;
    }
    
    //迭代
    int matrixChain(int n,int p[],int m[][7],int s[][7])
    {
        for(int r=2;r<=n;r++)
            for(int i=1;i<=n-r+1;i++)
            {
                int j=i+r-1;
                m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];
                s[i][j]=i;
                for(int k=i+1;k<j;k++)
                {
                    int t=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
                    if(t<m[i][j])
                    {
                        m[i][j]=t;
                        s[i][j]=k;
                    }
                }
            }
        return m[1][6];
    }
    
    void Traceback(int i,int j,int s[][7])
    {
        if(i==j) return;
        Traceback(i,s[i][j],s);
        Traceback(s[i][j]+1,j,s);
        printf("Multiply A%d,%d",i,s[i][j]);
        printf(" and A%d,%d
    ",s[i][j]+1,j);
    }
    
    int main()
    {
        int p[7]={30,35,15,5,10,20,25};
        int m[7][7]={},s[7][7]={};
    
        //printf("%d
    ",lookupchain(1,6,p,m,s));
        printf("%d
    ",matrixChain(6,p,m,s));
    
        // for(int i=0;i<7;i++)
        // {
        //     for(int j=0;j<7;j++)
        //         printf("%d ",m[i][j]);
        //     printf("
    ");
        // }
        Traceback(1,6,s);
        return 0;
    }
    
  • 相关阅读:
    最漂亮( iTerm2+oh-my-zsh配色)
    python对excel的操作
    appium环境搭建
    Python单元测试unittest
    git命令日常总结
    mongon数据库的查询样例
    组合逻辑电路笔记
    Jlink驱动下载
    机组笔记
    计算机网络随笔(一部分知识点)
  • 原文地址:https://www.cnblogs.com/yueshangzuo/p/7777471.html
Copyright © 2020-2023  润新知