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

   矩阵乘法不满足分配律,但满足结合律。因此A*B*C既可以按顺序(A*B)*C也可以按A*(B*C)来进行。假设A、B、C分别是2*3、3*4、4*5的,则(A*B)*C运算量是2*3*4+2*4*5=64,A*(B*C)的运算量是3*4*5*2*3*5=90.显然第一种顺序节省运算量。

   给出n个矩阵组成的序列,设计一种方法把他们依次乘起来,使得总的运算量尽量小。假设第i个矩阵A[i]是P[i-1]*P[i]的。

输入

3

2 3 4 5

输出

64

用f(i,j)表示A[i]、A[i+1]...A[j]乘起来的最少运算数

状态转移方程

f(i,j)=min{  f(i,j),    f(i,k) + f(k+1,j) + P[i-1]*P[k]*P[j]   }(i=<k<j)

 1 #include<stdio.h>
 2 int min(int a,int b)
 3 {
 4     return a<b?a:b;
 5 }
 6 int main()
 7 {
 8     int n,p[105],f[105][105];
 9     while(scanf("%d",&n)&&n)
10     {
11         int i,j,k;
12         for(i=0;i<=n;i++)scanf("%d",&p[i]);
13         for(i=1;i<=n;i++)
14         {
15             for(j=0;j<=n;j++)f[i][j]=1<<30;
16             f[i][i]=0;
17             f[i][i+1]=p[i-1]*p[i]*p[i+1];
18         }
19         for(k=2;k<=n;k++)
20             for(i=1;i<=n-k;i++)
21                 for(j=0;j<k;j++)
22                     f[i][i+k]=min((f[i][i+j]+f[i+j+1][i+k]+p[i-1]*p[i+j]*p[i+k]),(f[i][i+k]));
23         printf("%d\n",f[1][n]);
24     }
25     return 0;
26 }

转载于:https://www.cnblogs.com/gj-Acit/archive/2013/05/03/3055728.html

最优矩阵链乘(动态规划)相关推荐

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

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

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

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

  3. 矩阵相乘的strassen算法_矩阵乘法的Strassen算法+动态规划算法(矩阵链相乘和硬币问题)...

    矩阵乘法的Strassen 这个算法就是在矩阵乘法中采用分治法,能够有效的提高算法的效率. 先来看看咱们在高等代数中学的普通矩阵的乘法 两个矩阵相乘 上边这种普通求解方法的复杂度为: O(n3) 也称 ...

  4. 【算法分析与设计】矩阵链乘法最优顺序问题

    矩阵链乘法 矩阵连乘,选择不同的乘法顺序,效率可能千差万别. 高效的实现算法应该用动态规划来设计,具体的讲解可以看这里. 编程实现 public class Main {private static ...

  5. 以空间换时间——动态规划算法及其应用:矩阵链相乘

    动态规划算法是5大算法基础中最重要的一个,它专门用来解决平面世界下的应用,即会多次使用二维数组. 当然动态规划算法是空间换时间的算法,也就是说:我们可以利用空间资源来使某算法问题的时间复杂度降到最低. ...

  6. 【动态规划】矩阵链乘法

    矩阵链乘法    求解矩阵链相乘问题时动态规划算法的另一个例子.给定一个n个矩阵的序列(矩阵链)<A1,A2,...,An>,我们希望计算它们的乘积  A1A2...An    为了计算表 ...

  7. 动态规划典型题之——矩阵链乘法

    动态规划是算法分析与设计中一种重要的算法.其核心思想是将大问题划分为小问题进行解决,从而一步步获取最优解的处理算法. 文章目录 一.矩阵链相乘问题 二.求解 1.构建备忘录 2.回溯 结果展示 一.矩 ...

  8. 动态规划——矩阵链相乘

    如果看过我上一篇文章(动态规划--最长公共子序列)的同学,相信已经对动态规划的思想有了一定的了解和认识,即把之前求解得出的子问题存储起来,以便后续求解大问题直接使用. 本章要讲解的问题是矩阵链相乘.因 ...

  9. 动态规划:矩阵链连乘问题

    动态规划之矩阵连乘问题 矩阵链乘问题简单而言,便是给定n个矩阵{A1,A2--An},其中Ai与Ai+1是可乘的,考察其连乘时进行计算的最小次数. 在计算过程中,不同的加括号方式对于整个计算量有不一样 ...

  10. 【动态规划】矩阵链相乘 (ssl 1596)/能量项链 (ssl 2006)

    矩阵链相乘{\color{Cyan} 矩阵链相乘 }矩阵链相乘 Description Input n表示矩阵的个数(<=100) n+1个数,表示矩阵(<=100) Output 最小的 ...

最新文章

  1. spring boot 应用设置session path_kubernetes configmap 热更新spring-boot应用
  2. Java中break、Continue、reutrn总结
  3. linux编程综合案例
  4. python字符串split_「干货」Python字符串中的split方法
  5. mysql nosql 同步_使用canal和canal_mysql_nosql_sync同步mysql数据
  6. linux 知识点 随笔
  7. kubernetes对象之deployment
  8. Error:The module 'app' is an Android project without build variants, and cannot be built.
  9. Java好还是Python好?一张图告诉你!
  10. angular中利用zone避归没必要的开销提高程序的性能demo
  11. 在树莓派上搭建gitea
  12. Tachyon:Spark生态系统中的分布式内存文件系统的使用
  13. Xcode12 在Segue下切换视图时不充满屏幕的问题
  14. k线形态python_Python量化分析之K线模式识别
  15. clustalw序列比对_你还在用ClustalW做多序列比对?OUT了
  16. 笔记本“电源已接通,未充电”的解决办法 win7
  17. 示波器测量的波形一直抖动怎么办
  18. matlab复数fft,第30章 复数FFT的实现
  19. mysql怎么命令查看表的数据_查看MySQL数据库表的命令介绍
  20. Python中squeeze函数用法

热门文章

  1. STLC++(队列queue、栈stack、set\multiset 的用法)
  2. excel通配符?和*的使用——用于查找
  3. python解析GF1卫星数据.xml文件
  4. 项目:聊天室思路(linux下实现,语言:C/C++)
  5. Python基础语法-04-生成器,迭代器
  6. Mybatis-04-结果集映射resultMap/动态SQL/关联查询
  7. mysql 表数据压缩_mysql表数据压缩
  8. IT已成为最疯狂的加班行业,没有之一
  9. c语言表达式4 6的值是,C语言中,为什么指针表达式的值+1.对应的地址值却+4?/为什么两个数组元素的地址相减之差不为地址之差?...
  10. Vue.use 写多个_西双版纳能写立项报告收费公司