问题描述:给定n个矩阵{A1,A2,...,An},其中Ai与Ai+1是可乘的,我们要计算这n个矩阵的最少计算次数。

 将多个矩阵连乘抽象为最后一次计算即两个矩阵相乘。

 1 public static void test(int[]p) {2         int n=p.length-1;3         int[][] m=new int[n+1][n+1];//m[i][j]是i到j的最少计算次数4         int[][] s=new int[n+1][n+1];//s[i][j]记录最优的m[i][j]最后两个矩阵的分割处5         //初始值,递归出口6         for(int i=1;i<=n;i++) 7             m[i][i]=0;8         int j=0;9         for(int r=2;r<=n;r++) {
10             for(int i=1;i<=n-r+1;i++) {
11                 j=i+r-1;
12                 m[i][j]=m[i+1][j]+p[i-1]*p[i]*p[j];//初始值
13                 s[i][j]=i;
14                 for(int k=i+1;k<=j-1;k++) {
15                     int temp=m[i][k]+m[k+1][j]+p[i-1]*p[k]*p[j];
16                     if(temp<m[i][j]) {//更新
17                         m[i][j]=temp;
18                         s[i][j]=k;
19                     }
20                 }
21             }
22         }
23         System.out.println("-----------m------------");
24         for(int i=1;i<=n;i++) {
25             for(j=1;j<=n;j++) {
26                 System.out.print(m[i][j]+" ");
27             }
28             System.out.println();
29         }
30         System.out.println("-----------s------------");
31         for(int i=1;i<=n;i++) {
32             for(j=1;j<=n;j++) {
33                 System.out.print(s[i][j]+" ");
34             }
35             System.out.println();
36         }
37         Queue<Duan> q=new LinkedList<Duan>();
38         q.add(new Duan(s[1][n]+1,n));
39         q.add(new Duan(1,s[1][n]));
40         String[] strings=new String[n+1];
41         for(int i=1;i<=n;i++) {
42             strings[i]="A"+i;
43         }
44         while(!q.isEmpty()) {
45             Duan t=q.poll();
46             if(t.start!=t.end) {
47                 strings[t.start]="("+strings[t.start];
48                 strings[t.end]=strings[t.end]+")";
49                 if(t.end-t.start>1) {
50                     q.add(new Duan(s[t.start][t.end]+1,t.end));
51                     q.add(new Duan(t.start,s[t.start][t.end]));
52                 }
53             }
54         }
55         System.out.println("-----------式子------------");
56         for(int i=1;i<=n;i++) {
57             System.out.print(strings[i]);
58         }
59     }
60     public static void main(String[] args) {
61         int[]p= {1,5,10,100,1,2,100};
62         test(p);
63     }

1 class Duan{
2     int start;
3     int end;
4     public Duan(int start, int end) {
5         this.start = start;
6         this.end = end;
7     }
8 }

dp规划之矩阵连乘问题相关推荐

  1. java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径

    [leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...

  2. 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法

    题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...

  3. 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)

    最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...

  4. DP——最优矩阵链乘最优三角剖分

    最优矩阵链乘: 一个n*m的矩阵乘一个m*p的矩阵等于一个n*p的矩阵,运算量为mnp,现在有一组n个矩阵组成的序列,求运算量的最小值. 这是DP中的最优矩阵链乘问题,我们可以这么理解:用一个d[i] ...

  5. POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂

    哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种   递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列  ,可以放的方法一共有5种 1.放4个 1×2  则 为dp[n-2] ...

  6. 【luogu P7736】路径交点(LGV引理)(DP)(矩阵乘法)

    路径交点 题目链接:luogu P7736 题目大意 给你一个分层图,第一层和最后一层的点数相同. 然后要从第一层的 n 个点走到最后一层的 n 个点,每个点到达的位置互不相同. 然后问你偶数个交点的 ...

  7. BZOJ4861 魔法咒语 【AC自动机】【DP】【矩阵快速幂】

    题意: 用n个基本词汇拼出长度为L的字符串,每个基本词汇可以用0次,1次或多次,要求拼出的字符串不能出现m个禁忌词汇中的任何一个,求方案数 mod 1e9+7 60% :1<=N,M<=5 ...

  8. Happy Necklace dp 递推 矩阵快速幂

    当满足素数2和素数3的条件后,下一个素数区间5乃至之后的都会被满足. 考虑能否从f[n - 1]转换到f[n],考虑第i - 1位,如果后面加红色一定满足条件,所以f[n]先是加上f[n - 1] 如 ...

  9. 【动态规划笔记】状压dp:蓝桥 矩阵计数 (二进制枚举)

    二进制枚举: 一共有n*m个位置,每个位置都有两种选择 ,所以用二进制枚举,并判断是否合理 二进制枚举操作: 枚举所有的二进制数 for(int i=0;i<n*m;i++)  判断二进制数1的 ...

  10. 【动态规划】区间dp:P1005矩阵取数

    代码需要高精度,我不会

最新文章

  1. 如何用一句话证明你学过 NLP ?
  2. unix cut命令
  3. 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...
  4. mysql-win安装教程,WINDOWS下安装MYSQL教程详解
  5. Spring整合Hibernate 二 - 声明式的事务管理
  6. 静态方法-应用场景和定义方式
  7. Vrep 中的运动规划1(主要是基于RRT算法)
  8. Flink 上传的Jar包去哪里了
  9. C++管道通信类封装
  10. ASP.NET生成静态页面的简单实现
  11. SQL Server 2008 评估期已过解决方法
  12. callback回调使用 vue_Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸
  13. DB2 char()函数引起全表扫描
  14. MATLAB 不能保存变量问题及解决办法
  15. [C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
  16. 机器学习-决策树--基础知识总结
  17. OFD文件解析流程(转)
  18. 计算机网络局域网的组建实验报告,小型局域网组建实验报告
  19. Windows Server 2012 R2 打印服务器的设置与管理-深博-专题视频课程
  20. 0714.买卖股票的最佳时机含手续费【贪心算法】

热门文章

  1. MyBatis自动生成步骤
  2. react native中使用 react-native-easy-toast 和react-native-htmlview
  3. linux sshd 开机自启动
  4. Android 代码名字-API级别-版本号-NDK版本对应关系
  5. 如何告别脂肪肝?要注意什么?
  6. 人工智能史(来自wiki)
  7. Bresenham画线算法详解及其OpenGL编程实现
  8. 航海王启航服务器维护要多久,《航海王启航》7月1日服务器更新维护公告
  9. 拓端tecdat荣获腾讯云+社区年度最佳作者奖
  10. 拓端tecdat|SAS可视化高级ODS图形:PROC SGPLOT,BY组和SG注释