用c++写一个矩阵连乘并且给代码注释

时间: 2023-08-12 09:06:31 浏览: 48
好的,以下是用C++实现矩阵连乘的代码,并添加了注释: ```c++ #include<iostream> using namespace std; const int MAXN = 205; // 最大矩阵数量的上限 const int INF = 0x3f3f3f3f; // 无穷大 int n; // 矩阵数量 int m[MAXN][MAXN], s[MAXN][MAXN], p[MAXN]; // m、s、p 分别表示最小计算量矩阵、最优计算顺序矩阵、矩阵大小数组 // 动态规划求解最小计算量和最优计算顺序 void matrix_chain_order(){ for(int i=1; i<=n; i++) m[i][i] = 0; // 初始化对角线元素 for(int l=2; l<=n; l++){ // 枚举矩阵链长度 for(int i=1; i<=n-l+1; i++){ // 枚举矩阵链起点 int j = i + l - 1; // 计算矩阵链终点 m[i][j] = INF; // 初始化最小计算量 for(int k=i; k<j; k++){ // 枚举断点 int tmp = m[i][k] + m[k+1][j] + p[i-1]*p[k]*p[j]; // 计算最小计算量 if(tmp < m[i][j]){ // 更新最小计算量和最优计算顺序 m[i][j] = tmp; s[i][j] = k; } } } } } // 输出最优计算顺序 void print_optimal_parens(int i, int j){ if(i == j) cout<<'A'<<i; // 如果只有一个矩阵,直接输出矩阵名称 else{ cout<<'('; // 输出左括号 print_optimal_parens(i, s[i][j]); // 递归输出左子树 print_optimal_parens(s[i][j]+1, j); // 递归输出右子树 cout<<')'; // 输出右括号 } } int main(){ cin>>n; // 输入矩阵数量 for(int i=0; i<=n; i++) cin>>p[i]; // 输入矩阵大小 matrix_chain_order(); // 动态规划求解最小计算量和最优计算顺序 cout<<m[1][n]<<endl; // 输出最小计算量 print_optimal_parens(1, n); // 输出最优计算顺序 return 0; } ``` 该程序的输入格式为: 第一行为矩阵的数量 $n$; 第二行为 $n+1$ 个整数 $p_0, p_1, ..., p_n$,表示矩阵的大小; 输出格式为: 第一行为最小计算量; 第二行为最优计算顺序。 例如,对于输入数据: ``` 6 30 35 15 5 10 20 25 ``` 程序的输出为: ``` 15125 ((A1(A2A3))((A4A5)A6)) ```

相关推荐

最新推荐

recommend-type

c++ 连接两个字符串实现代码 实现类似strcat功能

c++ 连接两个字符串实现代码 实现类似strcat功能,需要的朋友可以参考下
recommend-type

linux系统中c++写日志文件功能分享

主要介绍了linux系统中c++写日志文件功能,简化了glog,只保留了写日志文件的功能,只是改写了linux版本,需要的朋友可以参考下
recommend-type

约瑟夫环问题用C++代码实现

8. 【题目】约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又...
recommend-type

用C++编写的求可逆矩阵的程序

总体需求:编写一个实现求矩阵逆矩阵的程序。 功能需求: 1) 输入一个n(n)阶方阵A, 2) 求出A的逆矩阵B,并输出。 3) 将A和B相乘得矩阵C,验证C是否为单位矩阵。 用户界面的结果显示: 输入: 程序正常运行后,...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

可见光定位LED及其供电硬件具体型号,广角镜头和探测器,实验设计具体流程步骤,

1. 可见光定位LED型号:一般可使用5mm或3mm的普通白色LED,也可以选择专门用于定位的LED,例如OSRAM公司的SFH 4715AS或Vishay公司的VLMU3500-385-120。 2. 供电硬件型号:可以使用常见的直流电源供电,也可以选择专门的LED驱动器,例如Meanwell公司的ELG-75-C或ELG-150-C系列。 3. 广角镜头和探测器型号:一般可采用广角透镜和CMOS摄像头或光电二极管探测器,例如Omron公司的B5W-LA或Murata公司的IRS-B210ST01。 4. 实验设计流程步骤: 1)确定实验目的和研究对象,例如车辆或机器人的定位和导航。
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依