先上代码

#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>const int N = 330;
struct pii
{int first, second;
};
pii matrix[N];
int f[N][N];void init()
{memset(f, 0x3f, sizeof f);for (int i = 0; i < N; i++) f[i][i] = 0;
}int min(int x, int y)
{if (x > y) return y;return x;
}int main()
{init();int n;scanf("%d", &n);for (int i = 1; i <= n; i++){scanf("%d%d", &matrix[i].first, &matrix[i].second);}for (int j = 1; j < n; j++){for (int i = 1; i+j <= n; i++){for (int k = i; k <= i + j; k++){f[i][i+j] = min(f[i][i+j], f[i][k] + f[k + 1][i+j] + matrix[i].first * matrix[k].second * matrix[i+j].second);}}}printf("%d\n", f[1][n]);return 0;
}

思路

给出iii,jjj两数f[i][j]f[i][j]f[i][j]表示区间iii到i+ji+ji+j的连乘最小次数。用m的结构体(用pair也行),两相邻矩阵相乘的计算次数是m[i].first∗m[i].second∗m[i+1].secondm[i].first * m[i].second * m[i+1].secondm[i].first∗m[i].second∗m[i+1].second 或者m[i].first∗m[i+1].first∗m[i+1].secondm[i].first * m[i+1].first * m[i+1].secondm[i].first∗m[i+1].first∗m[i+1].second 。推广开来就可以得出我们的动态规划f的层间关系。

层间关系

f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+m[i].first∗m[k].second∗m[j].second]f[i][j] = min(f[i][j],f[i][k]+f[k+1][j]+m[i].first * m[k].second * m[j].second]f[i][j]=min(f[i][j],f[i][k]+f[k+1][j]+m[i].first∗m[k].second∗m[j].second];
极限便是f[i][i]=0f[i][i] = 0f[i][i]=0(自乘次数为000)

for循环思路

因为这里增长的线性关系是iii到i+ji+ji+j的搜索宽度,所以第一层for代表宽度,第二层代表起点,这两层就构造了所有的以i为起点的所有向后宽度的搜多范围,并且先看每一个起点,遍历完所有的起点后再增加宽度。

矩阵连乘最小计算次数 C语言相关推荐

  1. Java动态规划---矩阵链相乘的最小计算代价

    参考书籍:算法导论第三版. 采用自底向上的递归模式来求解. * 动态规划在矩阵链相乘的应用,目的求出最小的计算代价,即矩阵的计算顺序,用加小括号表示. * 主要的计算思想是递归,而且是带备忘录的递归, ...

  2. 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)

    前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...

  3. c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)

    C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...

  4. 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数

    Palindrome Partitioning 原题链接Palindrome Partitioning 对字符串进行切分,使得切分出的每个子串都是回文串,返回所有的切分可能 对于每个字符都可能在它的位 ...

  5. 中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量

    中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量 特征的几何意义 MATLAB提供一个eigshow()函数,能够将原始数据和伸缩变换后的数据椭圆. 稀疏矩阵 完全存储方式 稀疏存储方式

  6. 中南大学 科学计算与MATLAB语言 11矩阵求值

    中南大学 科学计算与MATLAB语言 11矩阵求值 矩阵求值主要包括 矩阵的行列式值 矩阵的秩 矩阵的迹 矩阵的范数 矩阵的条件数 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称方阵所 ...

  7. [渝粤教育] 中南大学 科学计算与MATLAB语言 参考 资料

    教育 -科学计算与MATLAB语言-章节资料考试资料-中南大学[] 随堂测验 1.[单选题]MATLAB一词来自( )的缩写. A.Mathematica Laboratory B.Matrix La ...

  8. 一道题,最小操作次数使数组元素相等引发的思考

    前言 最近在打卡力扣刷题,一道简单题但是感觉挺好的. 力扣453:最小操作数使数组相等. 题目描述为: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素 ...

  9. 中南大学 10科学计算和 MATLAB 语言 矩阵变换

    中南大学 10科学计算和 MATLAB 语言 矩阵变换 diag(A) 提取矩阵A主对角线元素,产生一个列向量 diag(A,k) 提取矩阵A的第K条对角线上的元素,产生一个列向量(K指的是,与主对角 ...

最新文章

  1. 策略模式(Strategy)
  2. 精选一套火爆B站的硬核资源,请笑纳!
  3. Android 4.1.2系统添加重启功能
  4. 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
  5. 第九章 转移指令的原理
  6. python函数-基础知识
  7. 怎么判断冠词用a还是an_【语法微课堂】英语冠词的用法,学会这4点,轻松玩转a、an、the...
  8. 猛男教你写代码_猛男程序员,鼓存储器和1960年代机器代码的取证分析
  9. Netty工作笔记0036---单Reactor单线程模式
  10. BroadcastReceiver广播接受者简单使用
  11. 【C#】wpf自定义calendar日期选择控件的样式
  12. airflow时区问题
  13. Tomcat—logs文件夹中不再产生日志文件
  14. 车辆动力学模型在仿真测试中的应用实践
  15. 新联想ISG聚焦新IT,全要素推进企业智能化转型
  16. Java中new一个对象的过程
  17. ArcMap坐标系转换
  18. clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
  19. 雪花算法中机器id保证全局唯一
  20. 使用espressos idlingresource获得最高的Android测试速度

热门文章

  1. 岗位等级培训计算机高级技师,哈工大工人技术等级培训岗位考核的暂行规定.docx...
  2. 困惑度PPL (perplexity)
  3. Java中double转int的四舍五入的问题,以及向上向下取整
  4. 安卓毕业设计app项目源码基于Uniapp实现的美食餐厅订餐点餐
  5. 以6片74160为核心, 接成基本电子钟
  6. Max3成功刷入原生Android,小米Max 3完整刷成开发版开启Root超级权限的流程
  7. 01_从此哥看破红尘,要开始习惯写技术文档了。
  8. php excel获取合并单元格的内容,并自动向上获取第一个有值的单元格数据
  9. 【小知识点】MySql数据库增删改查常用语句命令
  10. unity 配置 Android 打包环境