最优矩阵链乘:

一个n*m的矩阵乘一个m*p的矩阵等于一个n*p的矩阵,运算量为mnp,现在有一组n个矩阵组成的序列,求运算量的最小值。

这是DP中的最优矩阵链乘问题,我们可以这么理解:用一个d[i][j]来存储第i个矩阵链乘到第j个矩阵的最优解,那么现在进行DP化,也就是找它的子解。我们把这组序列从中间不同位置裂开,记这个位置为k,那么不难得到d[i][j]=d[i][k]+d[k+1][j]+p[i-1]*p[k]*p[j],根据最优化原则,如果d[i][k]和d[k+1][j]都已经是最优解,那么我们只要取k为某值时d[i][j]为最小即可。

可以写出状态转移方程:d[i][j] = min(d[i][j], d[i][k] + d[k + 1][j] + p[i - 1] * p[k] * p[j]),但要注意,这里如果用递推,i和j都是很难取的,因为这按i和j的区间递推的,所以我们按照j-i递增的顺序递推,长区间的值依赖与小区间的值。边界条件是d[i][i]=0。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n;
int d[105][105],p[105];int main()
{int i, j,k,l;while (~scanf("%d", &n)){for (i = 1; i <= n; i++)scanf("%d%d", &p[i - 1], &p[i]);for (i = 1; i <= n; i++)d[i][i] = 0;for (l = 2; l <= n; l++)//按照j-i也就是区间的长度来递推{for (i = 1; i <= n - l + 1; i++){j = i + l - 1;d[i][j] = 0xfffffff;for (k = i; k <= j - 1; k++)d[i][j] = min(d[i][j], d[i][k] + d[k + 1][j] + p[i - 1] * p[k] * p[j]);}}printf("%d\n", d[1][n]);}return 0;
}

最优三角剖分:

对于一个n个顶点的凸三角形,用n-3条互不相交的对角线将其分成n-2个三角形,为每个三角形规定一个权函数w(i,k,j)(三角形的周长),求让所以三角形权值和最小的值。
还是区间DP的原理,从区间中找k,切出一个三角形和两个子多边形,进行DP即可,注意这里的边界为d[i][i]=d[i][i+1]=0。
状态转移方程为:d[i][j] = min(d[i][j], d[i][k] + d[k][j] + w(i, k, j)),i<k<j。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int n = 6;
int w[][n] = { { 0,2,2,3,1,4 },{ 2,0,1,5,2,3 },{ 2,1,0,2,1,4 },{ 3,5,2,0,6,2 },{ 1,2,1,6,0,1 },{ 4,3,4,2,1,0 } };
int d[10][10];int get_weight(int a, int b, int c)
{return (w[a][b] + w[a][c] + w[b][c]);
}int main()
{int i, j, l, k;for (i = 0; i <= n; i++)//边界条件{d[i][i] = 0;d[i][i + 1] = 0;}for (l = 2; l < n; l++){for (i = 0; i + l <= n-1; i++){j = i + l;d[i][j] = 0xffffff;for (k = i + 1; k < j; k++)d[i][j] = min(d[i][j], d[i][k] + d[k][j] + get_weight(i, k, j));}}printf("%d\n", d[0][n - 1]);return 0;
}

转载于:https://www.cnblogs.com/seasonal/p/10343738.html

DP——最优矩阵链乘最优三角剖分相关推荐

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

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

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

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

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

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

  4. python矩阵乘法算法_Python算法|矩阵链乘法

    概述 矩阵乘法是一个满足结合律的运算.显然,对于矩阵A.B.C来说,(AB)C 与 A(BC) 是等价的,我们可以根据自己的心情选择任意的运算顺序,总之,结果都是一样的. 糟糕的是,对计算机来说可不是 ...

  5. 矩阵连乘 最优计算次序 动态规划 图文详解

    矩阵连乘最优次序求解 没有公式,放心食用. 问题概要 给定矩阵 A1 A2 A3 A4 A5 A6 及其行列维度 求解这些矩阵的最优计算次序,使得乘法运算次数最少 其中 A1 A2 A3 A4 A5 ...

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

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

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

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

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

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

  9. 矩阵链乘法问题 (算法)

    一.概述 以两个矩阵相乘为例,A1*A2,A1和A2为两个矩阵,假设A1的行列数是p*q,A2的行列数是q*r.注意这里由于是A1乘以A2,所以A1的列数要等于A2的行数,否则无法做矩阵乘法,满足上述 ...

最新文章

  1. PHP的单引号双引号
  2. ajax获取网页新闻,基于Ajax的新闻网页动态数据的抓取方法及系统
  3. 如何处理Angular项目在Visual Studio Code打开报关于@Decorators的警告信息
  4. Ui设计中的动画如何应用,你知道吗?
  5. DDD-上下文映射图
  6. 【Redis】redis数据类型及应用场景
  7. termux安装python2_termux怎么安装python
  8. 华为Linux笔记本拆机,华为MateBook D怎么拆机?华为MateBook D拆机图文步骤详解
  9. 代码大全 服装尺寸图html,最全服装尺码对照表
  10. zuul+ribbon实现负载均衡
  11. Codeforces Round #531 F. Elongated Matrix (状压dp)
  12. 论文笔记:SubRank: Subgraph Embeddings via a Subgraph Proximity Measure2020PAKDD
  13. 南昌大学计算机导师林振荣,南昌大学各学院研究生导师介绍
  14. Maya10个非常实用的操作技巧,让你轻松玩转Maya
  15. 服务式办公室,价格影响选择
  16. uva10306(dp)
  17. 彻底搞懂a++和++a的区别
  18. 给GIS初学者的建议
  19. 去BAT,你应该要看一看的面试经验总结(转)
  20. 爬虫练习3 爬取堆糖网校花照片

热门文章

  1. selenium判断是否出现弹窗_如何判断三元催化器是否出现故障
  2. 设计模式03------单例模式
  3. 用navicate 连接本地数据库提示用户名/口令无效
  4. 微信小游戏 Egret开发数据域官方Demo下载地址
  5. JAVA并发编程学习笔记------FutureTask
  6. 开源android豆瓣电影阅读器
  7. Exadata X2-2 vs EMC Greenplum DCA vs Netezza TwinFin 12主要配置大对比
  8. OpenCV边缘检测专题
  9. iOS/OS X内存管理(一):基本概念与原理
  10. 云计算革命对国际关系的影响