题目描述

一个\(n*m\)矩阵由\(n\)行\(m\)列共\(n*m\)个数排列而成。两个矩阵\(A\)和\(B\)可以相乘当且仅当\(A\)的列数等于\(B\)的行数。一个\(N*M\)的矩阵乘以一个\(M*P\)的矩阵等于一个\(N*P\)的矩阵,运算量为\(nmp\)。

矩阵乘法满足结合律,\(A*B*C\)可以表示成\((A*B)*C\)或者是\(A*(B*C)\),两者的运算量却不同。例如当\(A=2*3\),\(B=3*4\),\(C=4*5\)时,\((A*B)*C=64\)而\(A*(B*C)=90\)。显然第一种顺序节省运算量。

现在给出\(N\)个矩阵,并输入\(N+1\)个数,第i个矩阵是\(a[i-1]*a[i]\)

输入格式

第一行n(n<=100) 第二行n+1个数

输出格式

最优的运算量

样例

样例输入

3
2 3 4 5

样例输出

64

题解

解释:

可能大部分同学连题目都没有看懂,其实是很好理解的。

如题目中的\(A、B、C,A*B=2*3*4,B*C=3*4*5\)。

可以这么理解:两个矩阵(长宽中必须有一个相同)相乘,讲相同部分放中间,剩下两个不同的部分在两边相乘。如:

\(A:x*y,B:y*z,C:z*l\)

\(A*B=x*y*z,B*C=y*z*l\)

那么三个矩阵相乘是什么样的呢?

还是按上面的例子:\((A*B)*C=(x*y*z)*C\),显然\(A*B\)后的矩阵长宽都发生了变化,变化的是:y的边去掉,x与z取相乘,则乘了后,矩阵变为了\(x*z\)

所以,则\((A*B)*C=(x*y*z)+(x*z*l),A*(B*C)=(x*y*l)+(y*z*l)\)

注意:

题中求的是运算量,与矩阵相乘后的结果不一样,相乘后的结果只是用来求下一次相乘的运算量。

样例模拟:

a[i]与a[i+1]即第i个矩阵

\(A:2*3;B:3*4;C:4*5\)

\((A*B)*C:2*3*4+2*4*5=64\)

\(A*(B*C):2*3*5+3*4*5=90\)

故最小的运算量=64

动态转移方程:

\(f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+a[i-1]*a[j]*a[k]);\)

//f[i][j]:从i到j的最小的运算量

//f[i][j]之间分开,分成i到k与k+1到j两个区间,现在就可以看出是很简单区间dp,在将运算量加上,取最小值

code

#include<bits/stdc++.h>
using namespace std;
const int maxn=200,INF=0x3f3f3f3f;
int dp[maxn][maxn],a[maxn];
int main(){
int n;cin>>n;
memset(dp,INF,sizeof(dp));
for(int i=0;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n+1;i++)
dp[i][i]=0;
for(int j=2;j<=n;j++){
for(int i=1,tmp;(tmp=i+j-1)<=n;i++){
for(int k=i;k<tmp;k++){
dp[i][tmp]=min(dp[i][tmp],dp[i][k]+dp[k+1][tmp]+a[i-1]*a[tmp]*a[k]);
}
}
}
cout<<dp[1][n];
return 0;
}

区间dp复习 之 tyvj 1198 矩阵连乘的更多相关文章

  1. tyvj 1198 矩阵连乘——区间dp

    tyvj 1198 矩阵连乘 题目描述 一个n*m矩阵由n行m列共n*m个数排列而成.两个矩阵A和B可以相乘当且仅当A的列数等于B的行数.一个N*M的矩阵乘以一个M*P的矩阵等于一个N*P的矩阵,运算 ...

  2. 区间DP复习

    区间DP复习 (难度排序:(A,B),(F,G,E,D,H,I,K),(C),(J,L)) 这是一个基本全在bzoj上的复习专题 没有什么可以说的,都是一些基本的dp思想 A [BZOJ1996] [ ...

  3. 区间dp复习 之 乘积最大

    题目描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一 ...

  4. 算法提高 矩阵乘法 区间DP

    这是神题,n <= 1000,如果是极限数据普通的n^3区间DP怎么可能过?可偏偏就过了. 刘汝佳大哥的训练指南上面说的存在nlgn的算法解决矩阵链乘问题,可是百度都找不到.... AC代码 # ...

  5. [jdoj1090]矩阵_区间dp

    矩阵 jdoj-1910 题目大意:给你连续的n个矩阵的长和宽,保证每连续的两个相邻矩阵满足相乘的条件,不能改变题目中矩阵的位置,求将这些矩阵相乘为一个矩阵的最小乘法次数. 注释:1<=n< ...

  6. POJ 1651 Multiplication Puzzle(类似矩阵连乘 区间dp)

    传送门:http://poj.org/problem?id=1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65536K T ...

  7. 蓝桥 ADV-232 算法提高 矩阵乘法 【区间DP】

      算法提高 矩阵乘法   时间限制:3.0s   内存限制:256.0MB      问题描述 有n个矩阵,大小分别为a0*a1, a1*a2, a2*a3, ..., a[n-1]*a[n],现要 ...

  8. 蓝桥杯:矩阵乘法(区间DP)

    http://lx.lanqiao.cn/problem.page?gpid=T417 题意:…… 思路:n=1000,一开始觉得区间DP会超时,后来想不到其他做法就这样做了,居然没超时. 状态转移: ...

  9. 区间dp提升复习

    区间\(dp\)提升复习 不得不说这波题真的不简单... 技巧总结: 1.有时候转移可以利用背包累和 2.如果遇到类似区间添加限制的题可以直接把限制扔在区间上,每次只考虑\([l,r]\)被\([i, ...

随机推荐

  1. elasticSearch插件metricbeat收集nginx的度量指标

    ngx_http_stub_status_module模块是Nginx中用来统计Nginx服务所接收和处理的请求数量,只要在编译安装Nginx的时候加上参数--with-http_stub_statu ...

  2. skywalking中文文档

    https://github.com/apache/skywalking/blob/v5.0.0-alpha/docs/README_ZH.md 大家可以前往如下地址下载我们的发布包: l  Apac ...

  3. Python3-算法-递归

    递归 递归算法是指一般通过函数或子进程来实现,在函数或子进程的内部,直接或间接地调用自己的算法,说白了就是自己调自己 注: 1.在使用递归的时候,必须要有一个递归出口,即一个明确的结束条件,否则就是死 ...

  4. volatile与lock前缀指令

    前言 我们知道volatile关键字的作用是保证变量在多线程之间的可见性,它是java.util.concurrent包的核心,没有volatile就没有这么多的并发类给我们使用. 本文详细解读一下v ...

  5. Jmeter(十三) - 从入门到精通 - JMeter定时器 - 上篇(详解教程)

    1.简介 用户实际操作时,并非是连续点击,而是存在很多停顿的情况,例如:用户需要时间阅读文字内容.填表.或者查找正确的链接等.为了模拟用户实际情况,在性能测试中我们需要考虑思考时间.若不认真考虑思考时 ...

  6. webstorm 调试 typescript

    { "compilerOptions": { "target": "es5", "outFile": "bin ...

  7. MFC文档视图中窗口切换 (2012-05-11 18:32:48)

    在文档试图应用程序,有时需要在工作区切换试图,以下就是如何切换试图了 .创建要切换的视图类,同时把构造函数,Create函数改变为public .在需要切换试图的动作响应中,加入切换代码,一般是在CM ...

  8. 【数位dp】CF 55D Beautiful numbers

    题目 Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer n ...

  9. 【经验】GaussDB(for MySQL)性能优化 —— 日志的“快递驿站”

    GaussDB(for MySQL)数据库在写入性能上,在业界同类产品中是最好的,这主要得益于GaussDB(for MySQL)在MySQL内核方面的诸多优化.其中有一项从“送快递”得来灵感的优化— ...

  10. 带你学够浪:Go语言基础系列 - 10分钟学方法和接口

    文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 对于一般的语言使用者来说 ,20% 的语言特性就能够满 ...