动态规划——数字三角形C语言

2023-11-20

一:分析

先说一下相关动态规划的一些概念,参考下方博文。

原文链接:https://blog.csdn.net/every__day/article/details/88174082

“一个模型三个特征”理论的讲解
动态规划作为一个非常成熟的算法思想,很多人对此做了非常全面的总结,我把这部分理论总结为“一个模型三个特征”。

首先,“一个模型”指的是动态规划适合解决问题的模型。我把这个模型定义为“多阶段决策最优解模型”。

具体来说,我们一般是用动态规划来解决最优问题。而解决问题的过程,需要经历多个决策阶段。每个决策阶段都对应一组状态。然后我们寻找一组决策序列,经过这组决策序列,能够产生最终期望求解的最优值

“三个特征”,分别是最优子结构、无后效性和重复子问题。这三个概念比较抽象,逐一解释一下。

1、最优子结构

最优子结构指的是,问题的最优解包含子问题的最优解。反过来说就是,我们可以通过子问题的最优解,推导出问题的最优解。如果我们把最优子结构,对应到我们前面定义的动态规划问题模型上,那我们也可以理解为,后面阶段的状态可以通过前面状态推导出来。

2、无后效性

无后效性,有两层含义,第一层含义是,在推导后面阶段状态的时候,我们只关心前面阶段的状态值,不关心这个状态是怎么一步步推导出来的。第二层含义是,某阶段状态一旦确定,就不受之后阶段的决策影响。无后效性是一个非常“宽松”的要求。只要满足前面提到的动态规划问题模型,其实基本上都会满足无后效性。

3、重复子问题

这个概念,前面一节,已经多次提到。用一句话概括就是: 不同的决策序列,到达某个相同的阶段时,可能会产生重复的状态。
 

正常分析很容易想到,自顶向下每次遇到两个分支,每次选取大的分支进行加和,一直到最底层即得到最优解。

但是做动态规划我们一定要注意子问题的解是不是真的可以构成原问题的解。

显而易见在这里回答是否定的。那我们就设法使之满足最优子结构。就是说我们新开辟一个内存空间,去存储对于数塔中每一个数字对于到达最低端的路径最大值。计算完成后答案随之复现。

我们必须选取所有可能的情况中最合适的一个,而不是顺着一个不完全的判定标准走一条路。

这里有两种方式,下面给出每个位置到最低端的最大路径值,这里采取第二种,因为更简单。

输入:

5

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

①:自顶向下

②:自低向上

顶部值即为所求值。

输出:

二:代码

如下:

#include<stdio.h>

int r,max,a[1002][1002],F[1002][1002];//a存储原始三角形信息,F存储最大路径权值和 ,此算法自底向上做 
main()
{
	scanf("%d",&r);
	for(int i=1;i<=r;i++)
		for(int j=1;j<=i;j++)
		{
			scanf("%d",&a[i][j]);
			F[i][j]=a[i][j];
		}
		
	for(int i=r-1;i>0;i--)//二维数组最后一行 
	{
		for(int j=1;j<=i;j++)//二维数组第一列 
		{
			if(F[i+1][j]>F[i+1][j+1])//自底向上依次比较取最大值加和 
			{
				max=F[i+1][j];
			}else{
				max=F[i+1][j+1];
			}
			F[i][j]+=max;
		}
	}
	
	printf("\n\n");
	printf("*********F[i][j]到最低端最大路径和**********\n\n"); 
	//输出F[] [],F[i][j]到最低端最大权值 
	for(int i=1;i<=r;i++)
	{
		for(int j=1;j<=i;j++)
		{
			if(F[i][j]<10)//为了统一格式,美观
			{
				printf("%d  ",F[i][j]); 
			}else{
				printf("%d ",F[i][j]); 
			}
			
		}
		printf("\n");
	}
	
		
		
	printf("\n\n**************最终结果为:***************\n\n");		
	printf("%d",F[1][1]);//输出最顶端到最低端的最大权值 
}

 

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

动态规划——数字三角形C语言 的相关文章

随机推荐

  • linux docker 基础命令

    docker常用命令 docker ps 显示所有的操作命令集合列表 docker login container registry oracle com 登录官方远程docker私有仓库 docker login username tes
  • spss练习数据_SPSS篇——数据的筛选

    前言 我们知道 在做数据分析时 经常要对数据库中的个案进行选择性的分析 由此排除一些数据 那么该如何利用SPSS进行数据的筛选呢 Step 1 打开SPSS 打开 数据 选择个案 Step 2 选择个案 对话框右侧 选择 栏有5个选项 所有
  • 云计算入门基础命令行

    严重声明 本人支持一切正规软件开发行为 接受知识付费理念 并坚决抵制盗版行为 用于学习交流的非盈利目的的 且法律允许且支持的条件下 可以进行相关文件交流 他人利用交流文件进行非法售卖等一切违法犯罪行为 本人概不负责 分享的网页链接能保证截止
  • Dynamics CRM online 添加附件

    1 创建一个字段 类型为文件 2 通过PoweApps将该字段添加到Form表单上
  • ESP8266上电时串口打印乱码原因和发送AT指令串口返回信息含义

    因为esp8266模块上电时 默认打印波特率为74880 其固件中通信与串口默认为115200 所以如果把串口设置为74880 之后再上电模块打印的信息就不会有乱码了 但AT指令默认通信波特率是115200 如果在使用AT通信时 在调到11
  • Docker 容器迁移

    1 把容器打包成镜像 docker commit m 描述 a 作者 CONTAINER ID 新的镜像名 docker commit m my rabbitmq a eric a922049125c4 rabbitmq my 1 0 2
  • QT 改编官方example QQuickView实现QQuickWidgt示波器

    先找到官方实例 将官方实例的QML文件全部搞到自己的资源中 pro中加入这个 DISTFILES 刚刚的QML文件路径 qml 还有这个 QT core gui quickwidgets QT qml 将官方的datasource cpp
  • k8s部署Prometheus抓取pods的metrics

    1 暴露pods给Prometheus抓取 spec replicas app replicas template metadata annotations prometheus io scrape true prometheus io p
  • centos7没有ens33网卡的解决方案

    1 首先设置在系统启动时激活网卡 vim etc sysconfig network scripts ifcfg ens33 将ONBOOT no改为ONBOOT yes 2 执行下面的命令 此时ifconfig 显示有了ens33网卡 但
  • 【Linux】Libevent库

    Libevent 高性能I O框架库 底层封装了select poll epoll 便于使用 I O框架库以库函数的形式 封装了较为底层的系统调用 给应用程序提供了一组更便于使用的接口 特点 1 跨平台 2 统一事件源 I O事件 信号 定
  • Jeesite框架实用 前端页面展示表如何插入其他表数据

    目录 前言 问题 解决方法 第一步 第二步 第三步 前言 最近做类似于OA产品时选用了Jeesite框架 也学习有一段时间 这个框架的初级操作嘛就是 设计好表然后用代码生成器生成 一张表生成一个前端页面显示 问题 代码生成器根据一张数据库表
  • Huggingface训练Transformer

    在之前的博客中 我采用SFT 监督优化训练 的方法训练一个GPT2的模型 使得这个模型可以根据提示语进行回答 具体可见博客召唤神龙打造自己的ChatGPT gzroy的博客 CSDN博客 Huggingface提供了一个TRL的扩展库 可以
  • Linux基础命令1(农夫笔记-自用)

    1 创建和查看隐藏文件 以 开头的文件或文档 攻击者可能要去传一个木马或者后门 或者自己要去做这些事情的时候需要用到 2 cd 等于cd 一样的作用 可以回到家目录 3 ll是ls l的别名 也具有同样的效果 就是使用较长格式列出信息 4
  • MATLAB中如何输入特殊符号

    alpha beta gamma theta Theta Gamma delta Delta xi Xi elta epsilong zeta miu nu tau lamda Lamda pi Pi sigma Sigma phi Phi
  • 初识express/路由/中间件

    路由的概念 模块化路由 中间件 要有输入输出 简化版本 全局生效中间件 局部生效中间件 注意事项 中间件分类 内置中间件 解析请求体 url encoded 自定义中间件 使用querystring模块解析请求体数据 编写接口
  • Linux笔记

    文章目录 一 初识Linux 1 操作系统概述 1 1 计算机由哪两个主要部分组成 1 2 操作系统是什么 有什么作用 1 3 常见的操作系统有哪些 2 Linux初识 3 虚拟机介绍 3 1 什么是虚拟机 3 2 为什么要使用虚拟机 4
  • 小程序扫码只允许扫码运单条形码

    wx scanCode success res gt console log res let result res result 只允许 字母 数字 字母 数字 if result 0 9a zA Z g test result wx sh
  • [网络安全自学篇] 二十七.Sqlmap基础知识、CTF实战及请求参数设置(一)

    这是作者的系列网络安全自学教程 主要是关于网安工具和实践操作的在线笔记 特分享出来与博友共勉 希望您们喜欢 一起进步 前文分享了Shodan搜索引擎的基本用法及Python命令行 本篇文章详细讲解了Sqlmap的基本用法 CTF实战 并且分
  • 由浅及深PCB布线设计

    第一部分 在当今激烈竞争的电池供电市场中 由于成本指标限制 设计人员常常使用双面板 尽管多层板 4层 6层及8层 方案在尺寸 噪声和性能方面具有明显优势 成本压力却促使工程师们重新考虑其布线策略 采用双面板 在本文中 我们将讨论自动布线功能
  • 动态规划——数字三角形C语言

    一 分析 先说一下相关动态规划的一些概念 参考下方博文 原文链接 https blog csdn net every day article details 88174082 一个模型三个特征 理论的讲解 动态规划作为一个非常成熟的算法思想