题目描述:

有若干个矩阵{Ai},元素都为整数且已知矩阵大小。

如果要计算所有矩阵的乘积A1 * A2 * A3 .. Am,最少要多少次整数乘法?

输入
第一行一个整数n(n <= 100),表示一共有n-1个矩阵。
第二行n个整数B1, B2, B3... Bn(Bi <= 100),第i个数Bi表示第i个矩阵的行数和第i-1个矩阵的列数。
等价地,可以认为第j个矩阵Aj(1 <= j <= n - 1)的行数为Bj,列数为Bj+1。
输出
一个整数,表示最少所需的乘法次数
采用动态规划分析:
优化目标是基本运算次数最小化,而这道题关键在于确定一个乘法的次序,相当于在n个矩阵间加括号。如何界定子问题的边界是产生的问题。如果从前向后划分,所产生的子问题只有后边界,但是在计算子问题A1.....j的过程中,我们需要知道子问题A1....i和子问题A(i+1)....j的信息,所以问题需要前后两个边界。用m[i][j]表示乘积Ai....j所用的最小运算次数。假定最后一次相乘发生在Ai.....k和A(k+1).....j之间,那么m[i][j]=min(i≤k<j){m[i][k]+m[k+1][j]+B(i-1)*B(k)*B(j)};
下边是代码的c语言实现
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int MAX=;
int m[][MAX];
int dp(int *p,int n){
for(int r=;r<=n;r++){
for(int i=;i<=n-r+;i++){
int j=i+r-;
m[i][j]=m[i+][j]+p[i-]*p[i]*p[j];
for(int k=i+;k<=j-;k++){
int t= m[i][k]+m[k+][j]+p[i-]*p[k]*p[j];
if(t<m[i][j]){
m[i][j]=t;
}
}
}
}
return m[][n];
}
int main(){
int n;
scanf("%d",&n);
memset(m,,sizeof(m));
int p[];    
for(int i=;i<n;i++){
scanf("%d",p+i);
}
int res=dp(p,n-);
printf("%d\n",res);
return ;
}

算法时间复杂度为O(n3)。

poj1651 最优矩阵乘法动态规划解题的更多相关文章

  1. 【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】

    目录: 1:一道简单题[树形问题](Bzoj 1827 奶牛大集会) 2:一道更简单题[矩阵乘法][快速幂] 3:最简单题[技巧] 话说这些题目的名字也是够了.... 题目: 1.一道简单题 时间1s ...

  2. 如何使用矩阵乘法加速动态规划——以[SDOI2009]HH去散步为例

    对这个题目的最初理解 开始看到这个题,觉得很水,直接写了一个最简单地动态规划,就是定义 f[i][j]为到了i节点路径长度为j的路径总数, 转移的话使用Floyd算法的思想去转移,借助这个题目也理解了 ...

  3. 【BZOJ4870】[Shoi2017]组合数问题 动态规划(矩阵乘法)

    [BZOJ4870][Shoi2017]组合数问题 Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < ...

  4. POJ1651 Multiplication Puzzle —— DP 最优矩阵链乘 区间DP

    题目链接:https://vjudge.net/problem/POJ-1651 Multiplication Puzzle Time Limit: 1000MS   Memory Limit: 65 ...

  5. BZOJ_1009_[HNOI2008]_GT考试_(动态规划+kmp+矩阵乘法优化+快速幂)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1009 字符串全部由0~9组成,给出一个串s,求一个长度为n的串,不包含s的种类有多少. 分析 ...

  6. Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)

    描述: 给出一个单词,在单词中插入若干字符使其为回文串,求回文串的个数(|s|<=200,n<=10^9) 这道题超神奇,不可多得的一道好题 首先可以搞出一个dp[l][r][i]表示回文 ...

  7. 洛谷 P1527 [国家集训队]矩阵乘法 解题报告

    P1527 [国家集训队]矩阵乘法 题目描述 给你一个\(N*N\)的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第\(K\)小数. 输入输出格式 输入格式: 第一行两个数\(N,Q\),表示矩阵大 ...

  8. BZOJ 4870 [Shoi2017]组合数问题 ——动态规划 矩阵乘法

    注意到$r<k$ 别问我为什么要强调. 考场上前30分水水. 然后写阶乘的时候大力$n\log {n}$预处理 本机跑的挺快的,然后稳稳的T掉了. 然后就是简单的矩阵乘法了. #include ...

  9. tyvj1198 最优矩阵连乘

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

随机推荐

  1. XML_PULL解析

    一.在Android应用中的XML文件来源 1.本地xml文件     本地XML文件可以放在应用根目录assets文件夹.res/xml.res/raw.SDcard卡.应用的data目录等: 除r ...

  2. sudo apt-get update

    要用apt-get这种方式安装LAMP时,最好先运行下面在命令升级自己的系统这样是为了更新源,而如果你找的源不好,可能安装LMAP失败.#sudo apt-get update 获得最近的软件包的列表 ...

  3. 限制TextBox输入,只能输入Double类型数字

    public class TextBoxDouble : TextBox { public TextBoxDouble() { KeyDown += TextBoxDouble_KeyDown; Te ...

  4. mac下配置java环境

    1.tomcat配置 http://www.cnblogs.com/freeyiyi1993/p/3436368.html 2.下载eclipse和jdk安装  jdk去oracle网站下载

  5. 如何去除List中的重复值?

    今天碰到一个问题,已经有一个List<string>,里面有重复值,希望将重复值去掉,同时不能破坏现有的顺序. 感谢 http://bbs.csdn.net/topics/39024721 ...

  6. heap creation

    There two methods to construct a heap from a unordered set of array. If a array has size n, it can b ...

  7. C# base和this[转]

    new关键字引起了大家的不少关注,尤其感谢Anders Liu的补充,让我感觉博客园赋予的交流平台真的无所不在.所以,我们就有必要继续这个话题,把我认为最值得关注的关键字开展下去,本文的重点是访问关键 ...

  8. OceanBase中主备Rootserver如何管理切换

    主RootServer会不断给备RootServer发送lease.被RootServer收到该lease后会保存到几个变量中: int ObCheckRunnable::renew_lease(co ...

  9. javascript高级知识点——函数的长度

    代码信息来自于http://ejohn.org/apps/learn/. 函数的长度属性如何工作? function makeNinja(name){} function makeSamurai(na ...

  10. javascript高级知识分析——实例化

    代码信息来自于http://ejohn.org/apps/learn/. new做了什么? function Ninja(){ this.name = "Ninja"; } var ...