dp规划之矩阵连乘问题
问题描述:给定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规划之矩阵连乘问题相关推荐
- java某个起点出发的最长路径_【leetcode-动态规划】矩阵中的最长递增路径
[leetcode-动态规划]矩阵中的最长递增路径 题目: 给定一个整数矩阵,找出最长递增路径的长度. 对于每个单元格,你可以往上,下,左,右四个方向移动. 你不能在对角线方向上移动或移动到边界外(即 ...
- 【bzoj4870】[Shoi2017]组合数问题 dp+快速幂/矩阵乘法
题目描述 输入 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 输出 一行一个整数 ...
- 【动态规划】区间DP - 最优矩阵链乘(另附POJ1651Multiplication Puzzle)
最优矩阵链乘(动态规划) 一个n∗mn*mn∗m的矩阵由 nnn 行 mmm 列共 n∗mn*mn∗m 排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个nm的矩阵乘mp的矩阵,运算量 ...
- DP——最优矩阵链乘最优三角剖分
最优矩阵链乘: 一个n*m的矩阵乘一个m*p的矩阵等于一个n*p的矩阵,运算量为mnp,现在有一组n个矩阵组成的序列,求运算量的最小值. 这是DP中的最优矩阵链乘问题,我们可以这么理解:用一个d[i] ...
- POj 3420 Quad Tiling 状态压缩DP+递推+矩阵快速幂
哈哈,写了好久的,总算对了. 接下来介绍两种思路: 先介绍一种 递推+矩阵的快速幂的方法 一种DP的思想考虑4×n的最后一列 ,可以放的方法一共有5种 1.放4个 1×2 则 为dp[n-2] ...
- 【luogu P7736】路径交点(LGV引理)(DP)(矩阵乘法)
路径交点 题目链接:luogu P7736 题目大意 给你一个分层图,第一层和最后一层的点数相同. 然后要从第一层的 n 个点走到最后一层的 n 个点,每个点到达的位置互不相同. 然后问你偶数个交点的 ...
- BZOJ4861 魔法咒语 【AC自动机】【DP】【矩阵快速幂】
题意: 用n个基本词汇拼出长度为L的字符串,每个基本词汇可以用0次,1次或多次,要求拼出的字符串不能出现m个禁忌词汇中的任何一个,求方案数 mod 1e9+7 60% :1<=N,M<=5 ...
- Happy Necklace dp 递推 矩阵快速幂
当满足素数2和素数3的条件后,下一个素数区间5乃至之后的都会被满足. 考虑能否从f[n - 1]转换到f[n],考虑第i - 1位,如果后面加红色一定满足条件,所以f[n]先是加上f[n - 1] 如 ...
- 【动态规划笔记】状压dp:蓝桥 矩阵计数 (二进制枚举)
二进制枚举: 一共有n*m个位置,每个位置都有两种选择 ,所以用二进制枚举,并判断是否合理 二进制枚举操作: 枚举所有的二进制数 for(int i=0;i<n*m;i++) 判断二进制数1的 ...
- 【动态规划】区间dp:P1005矩阵取数
代码需要高精度,我不会
最新文章
- 如何用一句话证明你学过 NLP ?
- unix cut命令
- 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...
- mysql-win安装教程,WINDOWS下安装MYSQL教程详解
- Spring整合Hibernate 二 - 声明式的事务管理
- 静态方法-应用场景和定义方式
- Vrep 中的运动规划1(主要是基于RRT算法)
- Flink 上传的Jar包去哪里了
- C++管道通信类封装
- ASP.NET生成静态页面的简单实现
- SQL Server 2008 评估期已过解决方法
- callback回调使用 vue_Vue 数据更新了但页面没有更新的 7 种情况汇总及延伸
- DB2 char()函数引起全表扫描
- MATLAB 不能保存变量问题及解决办法
- [C/C++标准库]_[0基础]_[优先队列priority_queue的使用]
- 机器学习-决策树--基础知识总结
- OFD文件解析流程(转)
- 计算机网络局域网的组建实验报告,小型局域网组建实验报告
- Windows Server 2012 R2 打印服务器的设置与管理-深博-专题视频课程
- 0714.买卖股票的最佳时机含手续费【贪心算法】
热门文章
- MyBatis自动生成步骤
- react native中使用 react-native-easy-toast 和react-native-htmlview
- linux sshd 开机自启动
- Android 代码名字-API级别-版本号-NDK版本对应关系
- 如何告别脂肪肝?要注意什么?
- 人工智能史(来自wiki)
- Bresenham画线算法详解及其OpenGL编程实现
- 航海王启航服务器维护要多久,《航海王启航》7月1日服务器更新维护公告
- 拓端tecdat荣获腾讯云+社区年度最佳作者奖
- 拓端tecdat|SAS可视化高级ODS图形:PROC SGPLOT,BY组和SG注释