矩阵连乘最小计算次数 C语言
先上代码
#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语言相关推荐
- Java动态规划---矩阵链相乘的最小计算代价
参考书籍:算法导论第三版. 采用自底向上的递归模式来求解. * 动态规划在矩阵链相乘的应用,目的求出最小的计算代价,即矩阵的计算顺序,用加小括号表示. * 主要的计算思想是递归,而且是带备忘录的递归, ...
- 汉诺塔怎么加计数次数c语言,C语言计算汉诺塔最小移动步数 (二)
前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较繁琐的.所以又根据这个公式又写了一个. ...
- c语言汉诺塔移动次数,C语言计算汉诺塔最小挪动步数 (二)
C语言计算汉诺塔最小移动步数 (二) 前几天写的:C语言计算汉诺塔最小移动步数(一) 当时还不知道用2^n-1这个公式来求解汉诺塔移动步骤.=_= 偶然间在网上发现了这个公式,发现当时写的算法还是比较 ...
- 每天一道LeetCode-----将字符串切分,使每个子串都是回文串,计算所有可能结果和最小切分次数
Palindrome Partitioning 原题链接Palindrome Partitioning 对字符串进行切分,使得切分出的每个子串都是回文串,返回所有的切分可能 对于每个字符都可能在它的位 ...
- 中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量
中南大学 科学计算与MATLAB语言 矩阵的特征值与特征向量 特征的几何意义 MATLAB提供一个eigshow()函数,能够将原始数据和伸缩变换后的数据椭圆. 稀疏矩阵 完全存储方式 稀疏存储方式
- 中南大学 科学计算与MATLAB语言 11矩阵求值
中南大学 科学计算与MATLAB语言 11矩阵求值 矩阵求值主要包括 矩阵的行列式值 矩阵的秩 矩阵的迹 矩阵的范数 矩阵的条件数 把一个方阵看作一个行列式,并对其按行列式的规则求值,这个值就称方阵所 ...
- [渝粤教育] 中南大学 科学计算与MATLAB语言 参考 资料
教育 -科学计算与MATLAB语言-章节资料考试资料-中南大学[] 随堂测验 1.[单选题]MATLAB一词来自( )的缩写. A.Mathematica Laboratory B.Matrix La ...
- 一道题,最小操作次数使数组元素相等引发的思考
前言 最近在打卡力扣刷题,一道简单题但是感觉挺好的. 力扣453:最小操作数使数组相等. 题目描述为: 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 .返回让数组所有元素 ...
- 中南大学 10科学计算和 MATLAB 语言 矩阵变换
中南大学 10科学计算和 MATLAB 语言 矩阵变换 diag(A) 提取矩阵A主对角线元素,产生一个列向量 diag(A,k) 提取矩阵A的第K条对角线上的元素,产生一个列向量(K指的是,与主对角 ...
最新文章
- 策略模式(Strategy)
- 精选一套火爆B站的硬核资源,请笑纳!
- Android 4.1.2系统添加重启功能
- 【AI产品】如何让Google的AI给你捕捉最美的自拍瞬间
- 第九章 转移指令的原理
- python函数-基础知识
- 怎么判断冠词用a还是an_【语法微课堂】英语冠词的用法,学会这4点,轻松玩转a、an、the...
- 猛男教你写代码_猛男程序员,鼓存储器和1960年代机器代码的取证分析
- Netty工作笔记0036---单Reactor单线程模式
- BroadcastReceiver广播接受者简单使用
- 【C#】wpf自定义calendar日期选择控件的样式
- airflow时区问题
- Tomcat—logs文件夹中不再产生日志文件
- 车辆动力学模型在仿真测试中的应用实践
- 新联想ISG聚焦新IT,全要素推进企业智能化转型
- Java中new一个对象的过程
- ArcMap坐标系转换
- clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
- 雪花算法中机器id保证全局唯一
- 使用espressos idlingresource获得最高的Android测试速度
热门文章
- 岗位等级培训计算机高级技师,哈工大工人技术等级培训岗位考核的暂行规定.docx...
- 困惑度PPL (perplexity)
- Java中double转int的四舍五入的问题,以及向上向下取整
- 安卓毕业设计app项目源码基于Uniapp实现的美食餐厅订餐点餐
- 以6片74160为核心, 接成基本电子钟
- Max3成功刷入原生Android,小米Max 3完整刷成开发版开启Root超级权限的流程
- 01_从此哥看破红尘,要开始习惯写技术文档了。
- php excel获取合并单元格的内容,并自动向上获取第一个有值的单元格数据
- 【小知识点】MySql数据库增删改查常用语句命令
- unity 配置 Android 打包环境