矩阵链乘法(最优解)————算法导论(C语言实现)

2023-05-16

这两天算法课刚学了这个,于是就想着用C语言自己撸出来。
首先是寻找最优解的过程,对于下标从i到j的矩阵链,我们将其分成两部分i到k和k+1到j,遍历i到j之间的每一个k,找到最小值即可。
为了输出最优解还需要一个二维数组存储矩阵链i~j的截断位置。
这里是c代码:

#include<stdio.h>
#include<stdlib.h>
#define maxSize 1000
#define maxNum  100000000
int dp[maxSize][maxSize];//从i到j相乘所需要的最少计算次数 
int memeo[maxSize][maxSize];//储存从i到j在哪里截断 
void find(int *numSequence,int n){
	int i,j,k,l,tmp;
	for(i=0;i<=n;i++){
		dp[i][i]=0;//长度为1时0次计算 
		memeo[i][i]=i;
	}
	for(l=2;l<=n;l++){//遍历长度从2到n 
		for(i=1;i<=n-l+1;i++){
			j=i+l-1;
			dp[i][j]=maxNum;
			for(k=i;k<j;k++){//在k处截断,分成i~k,k+1~j,两部分 
				tmp=dp[i][k]+dp[k+1][j]+numSequence[i-1]*numSequence[k]*numSequence[j];
				if(tmp<dp[i][j]){
					dp[i][j]=tmp,memeo[i][j]=k; 
				}
			}
		}
	}
	
	
}
void print(int start,int end){//递归输出最优方案 
	if(start==end){
		printf("A%d",start);
	}
	else{
		printf("(");
		print(start,memeo[start][end]);
		print(memeo[start][end]+1,end);
		printf(")");
		
	}
}

int main(){
int numSequence[maxSize],n,i;
scanf("%d",&n);
for(i=0;i<=n;i++){
	scanf("%d",&numSequence[i]);
}
find(numSequence,n);
printf("%d\n",dp[1][n]);
print(1,n);
return 0;
 


}

最优解不止一个,而代码所输出的最优解是从左往右找到的第一个,通过修改代码,可以输出所有最优解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

矩阵链乘法(最优解)————算法导论(C语言实现) 的相关文章

  • 【window 安装多环境python冲突 -已解决】

    简介 xff1a 在window上面那幢一个python原生环境时没有问题 但是在安装anaconda xff0c 就会出现整个环境呗anaconda所占据 lt 首先我的环境目前装了三个环境 xff0c 一个是python原生3 7 和3
  • 最大似然估计和最小二乘估计等价的条件

    最近在上 交通大数据 一课 xff0c 里面的公式推导还是有点麻烦的 xff0c 今天就来推导下在什么情况下最大似然估计和最小二乘估计等价 先来说一下结论 xff1a 当模型估计值和真实值间的残差项服从均值是0的高斯分布时 xff0c 就有
  • 端口号的作用,及为什么需要端口号

    一 端口概念二 网络端口的分类 xff1a 2 1 公认端口 xff08 Well KnownPorts xff09 xff1a 范围从0到10232 2 动态端口 xff08 Dynamic Ports xff09 xff1a 范围从10
  • 关于审查元素与查看网页源码的区别

    不知道大家发现没有 xff0c 当我们用chrome浏览器打开任意一个网页 xff0c 右键单击页面有两个很相似的选项 就是查看网页源代码以及检查 xff08 审查元素 xff09 之前我一直认为这两个选项是没有什么区别的 xff0c 但c
  • 教育edusrc证书站点漏洞挖掘

    前言 以下涉及到的漏洞已提交至edusrc教育行业漏洞报告平台并已修复 xff0c 该文章仅用于交流学习 xff0c 切勿利用相关信息非法测试 xff0c 如有不足之处 xff0c 欢迎各位大佬指点 正文 0x00 敏感信息泄漏 访问存在漏
  • VSCode中Git解决冲突的步骤

    VSCode中Git解决冲突的步骤 1 gt gt 合并分支后 如果存在冲突 右下角会出现一个提示框 提示 存在合并冲突 请在提交之前解决这些冲突 2 gt gt 左边导航第三个图标中 xff0c 找到产生冲突的文件 3 gt gt 打开文
  • Visual Studio Code(vs code)函数跳转及返回

    函数跳转 一 安装 PHP IntelliSense插件 打开vsode 编辑器 xff0c ctrl 43 shift 43 x 打开扩展 xff0c 或者点击左边的那个方框图标 xff0c 搜索 PHP IntelliSense 安装插
  • 苹果手机连电脑只显示充电怎么办

    苹果驱动程序没有安装或版本不可用 1 右键单击此电脑选择属性 2 点击控制面板进入 3 点击查看设备的打印机 4 右键查看驱动属性是否可用 5 不可用点击更改设置 电脑USB接口已损坏 要确认是否出现此问题 xff0c 最直接的方法是 xf
  • windows,cmd中查看当前目录下的文件及文件夹

    需求描述 xff1a 在使用cmd的过程中 xff0c 有的时候需要查看当前目录下有哪些文件或者文件夹 xff0c 类似linux下的ls命令 操作过程 xff1a 1 通过dir命令查看当前目录下有哪些的文件及文件夹 备注 xff1a 通
  • git未提交代码,pull本地被覆盖解救办法

    问题描述 xff1a 写了一天的代码 xff0c 没有commit xff0c 就拉取了同事的代码 xff0c 拉取同事代码后 xff0c 发现自己写了一天的代码全部找不到了 解决思路 xff1a git没有commit xff0c 那么网
  • Dockerfile究竟是做什么的

    Dockerfile是什么 Dockerfile是一个创建镜像所有命令的文本文件 包含了一条条指令和说明 每条指令构建一层 通过docker build命令 根据Dockerfile的内容构建镜像 因此每一条指令的内容 就是描述该层如何构建
  • Error generating the report: org.apache.jmeter.report.dashboard.GenerationException: Error while pro

    刚开始我安装的jdk 是jdk 17 把jtl文件生成html报告的时候 xff0c 报了以上的错误 后来把该jdk卸载了 重新安装了jdk1 8 xff0c 就可以正常生成了 windows下载地址 xff1a https jdk jav
  • Yslow使用方法

    概述 YSlow是Yahoo发布的一款基于FireFox的插件 xff0c 这个插件可以分析网站的页面 xff0c 并告诉你为了提高网站性能 xff0c 如何基于某些规则而进行优化 YSLOW有什么作用 xff1f YSlow可以对网站的页
  • JVM中的垃圾回收机制和垃圾收集器

    文章目录 一 什么是垃圾回收二 为什么需要垃圾回收三 java中的四种引用类型四 垃圾识别机制4 1 引用计数算法4 2可达性分析算法 五 finalize 赋予对象重生六 四种垃圾回收算法6 1标记清除算法6 2标记整理算法6 3复制算法
  • Alibaba Sentinel超详细整理

    Alibaba Sentinel 是面向云原生微服务的流量控制 熔断降级组件 监控保护你的微服务 为什么要学Alibaba Sentinel 先来看看Sentinel的前身 Hystrix 可以翻阅我的文章整理 总结下来有几点 需要我们程序
  • Proxifier与BurpSuite实现PC小程序抓包

    下载安装Proxifier和BurpSuite xff0c 安装及破解方法请自行百度 安装完成后启动BurpSuite并将浏览器代理至BP xff08 默认为127 0 0 1 8080 xff09 xff0c 代理后访问http burp
  • 连接外网下载资料

    采用如下链接的方式可以免费试用4天 https github com xwtxwy001 xiaoyu wiki mysoft
  • apache创建虚拟站点的三种方式(转)

    原文地址 xff1a https blog csdn net xiaokui wingfly article details 51481234 三种方式 xff1a xff08 1 xff09 多IP xff08 一台主机有多个网卡 xff
  • 《强化学习》学习笔记2——价值学习

    目标函数 价值学习的目标是找到一个估计函数 xff0c 能够正确地估计当前状态下采取某一个行动能够带来的价值 当找到这个估计函数时 xff0c 我们就可以用来进行决策 比如说 xff0c 在围棋游戏中 xff0c 有一个估计函数 xff0c
  • 《强化学习》学习笔记4—— actor-critic 算法

    算法思想 前面有提到 xff0c 训练一个强化学习 xff0c 可以训练一个价值评估函数 xff0c 也可以训练一个策略函数 价值学习可以通过TD算法 xff0c 使得训练过程可以单步更新 xff0c 而不用等到游戏回合结束之后进行模型参数

随机推荐

  • 在 Linux 操作系统上安装和配置 Flutter 开发环境

    安装命令行工具以及依赖 bashcurlfilegit 2 xmkdirrmunzipwhichxz utilsziplibglu1 mesa 使用 apt install xxx 即可 使用git下载源码到本地 git clone htt
  • vscode 连接linux服务器搭建远程开发环境

    1 安装vscode Remote Development插件 打开插件 xff1a 按照提示输入命令即可 xff1a
  • chatgpt 初探

    You yangzhengning ChatGPT Hi YangZhengNing you ve come to the right place for help with coding One thing that might help
  • Qt 开发使用VSCode 笔记2

    在之前有写过使用VSCode开发QT的笔记 Qt 开发使用VSCode 在以前的基础上继续学习记录写下 Qt 开发使用VSCode 笔记2 该笔记相比之前的Qt 开发使用VSCode新加了如下内容 xff1a 工作区的使用使用Natvis进
  • c语言数据结构-算法篇之冒泡排序

    文章目录 前言一 冒泡排序是什么 xff1f 二 简单版冒泡排序1 升序 xff0c 降序2 代码 改进版 前言 排序方法是一种重要的 xff0c 基本的算法 排序的方法很多 xff0c 本章就介绍冒泡排序 一 冒泡排序是什么 xff1f
  • 腾讯天气接口

    官方网站 xff1a https tianqi qq com 城市接口 xff1a https wis qq com city like source pc xff08 请求类型pc xw xff09 city 龙岗 xff08 搜索地名
  • Java调用第三方接口示范

    在项目开发中经常会遇到调用第三方接口的情况 xff0c 比如说调用第三方的天气预报接口 使用流程 1 准备工作 xff1a 在项目的工具包下导入HttpClientUtil这个工具类 xff0c 或者也可以使用Spring框架的restTe
  • 【K8S】v1.26集群搭建 - 完整篇

    K8S v1 26集群环境安装 完整篇 Kubernetes 1 26 安装一 集群简介资源清单 二 Vagrant 创建三台CentOS7服务器三 虚拟机环境配置四 docker安装五 k8s安装六 k8s master节点初始化操作步骤
  • linux c++通讯架构实战篇详细介绍

    章节总述 这是一篇以讲解 网络通讯和架构为主的篇章 网络通讯 xff1a 写自己能够驾驭的网络通讯代码来实现具体的网络通讯功能 架构 xff1a 架构师 1 架构师的责任 xff1a 负责产品 软件 的总体规划设计 把掌握的技术整合 融合
  • KEIL5不能高亮显示的一个问题

    折叠 下面的代码 不能高亮显示 解决办法 需要打开折叠
  • 关于C语言的数组赋值和数组下标越界问题

    一 数组赋值 数组名就代表着该数组的首地址 xff0c 后面的所有元素都可以根据数组名加上偏移量取到 1 一维数组 第一个小例子 xff1a 编程实现显示用户输入的月份 xff08 不考虑闰年 xff09 拥有的天数 include spa
  • 计算机网络自顶向下方法(第七版)第二章课后答案

    楼主最近开始学 计算机网络 xff1a 自顶向下方法 xff08 第七版 xff09 这本书 xff0c 这是我自己写的答案 xff0c 也有参考其他同学的 xff0c 但是不保证正确性 xff0c 大家仅作参考 2 1 R1 xff1a
  • 关于家庭路由器网络布线

    目录 1 网络需求概述 xff08 1 xff09 轻度用户 xff1a xff08 2 xff09 重度用户 xff1a 2 具体用户需求 二 网络布线 1 背景知识 xff08 1 xff09 网线种类 xff08 2 xff09 布线
  • 关于SSDP协议的基础知识

    SSDP就是简单服务发现协议 xff08 SimpleServiceDiscoveryProtocol xff09 是一种应用层协议 xff0c 它是构成通用即插即用 也就是UPnP xff0c UPnP是各种各样的智能设备 无线设备和个人
  • 堆的相关概念、简单实现、基础用法

    堆的相关概念 简单实现 基础用法 堆用数组简单实现堆及其基本操作 xff08 C 43 43 xff09 堆的基本用法 xff08 C 43 43 xff09 纪念 想对学过的数据结构和算法分析知识进行一点总结 xff0c 接下来使用的编程
  • 在linux上安装微信

    如何在linux上安装微信呢 xff1f 腾讯只在windows和mac上推出了官方版微信 xff0c 所以只能寻找其他途径 题主今天在ubuntu上安装了微信以后 xff0c 发现其实就是网页端微信 xff0c 而且奇怪的是不管是在ubu
  • 更改计算机上的远程桌面的侦听端口

    适用于 xff1a Windows 10 Windows 8 1 Windows 8 Windows Server 2019 Windows Server 2016 Windows Server 2012 R2 Windows Server
  • iOS UISlider用法及自定义滑块

    一 学习Slider的时候 xff0c 发现在设置滑块的轨道图片时总看到一个方法叫做 UIImage leftTrack 61 UIImage imageNamed 64 34 34 resizableImageWithCapInsets
  • 搭建靶场

    在终端输入 xff1a ifconfig查看ip地址 xff0c 接着输入netdiscover r xxx xxx xxx 1 24 可能出现在vmware上的kali搜索不到virbox上的靶机 xff0c 这是因为二者不在同一网段 x
  • 矩阵链乘法(最优解)————算法导论(C语言实现)

    这两天算法课刚学了这个 xff0c 于是就想着用C语言自己撸出来 首先是寻找最优解的过程 xff0c 对于下标从i到j的矩阵链 xff0c 我们将其分成两部分i到k和k 43 1到j xff0c 遍历i到j之间的每一个k xff0c 找到最