动态规划-入门篇

动态规划入门篇 大家好,我是耀星,相信大家在学习算法时会遇到很多的问题,当然我在学习时也会遇到问题, 动态规划与递归的关系 动态规划和递归非常的相似,都是通过组合子问题的解来求解原问题,且一般递归的问题都可以转化为动态规划,咱们举个简单的例子👇斐波那契数列。 第i个斐波那契数列值F[i]=F[i-1]+F[i-2],如果我们想知道F[n],那么我们就必须要知道F[n-1]和F[n-2]的值,如果采用递归的思路,将F[n]拆分成求F[n-1]+F[n-2],将原问题拆分成子问题求解,不同的子问题又有公... 阅读详情

虽说以前学过,但好久没练基本上忘光了,那我就从入门篇开始刷起吧。

The Triangle
Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 34125 Accepted: 20303

Description

7
3   8
8   1   0
2   7   4   4
4   5   2   6   5

(Figure 1)
Figure 1 shows a number triangle. Write a program that calculates the highest sum of numbers passed on a route that starts at the top and ends somewhere on the base. Each step can go either diagonally down to the left or diagonally down to the right. 

Input

Your program is to read from standard input. The first line contains one integer N: the number of rows in the triangle. The following N lines describe the data of the triangle. The number of rows in the triangle is > 1 but <= 100. The numbers in the triangle, all integers, are between 0 and 99.

Output

Your program is to write to standard output. The highest sum is written as an integer.

Sample Input

5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

Sample Output

30

Source



题目要求:

输入一个n层的三角形,第i层有i个数,求从第1层到第n层的所有路线中,权值之和最大的路线。
规定:第i层的某个数只能连线走到第i+1层中与它位置相邻的两个数中的一个。


题目分析:我用map[i][j]代表三角形第i行j列的值,dp[i][j]代表从map[i][j]开始向下走的最大和,因此我们最终要求的最大和就是dp[0][0]。

代码:

#include<iostream>
using namespace std;
const int MAX=110;
int map[MAX][MAX];              //这个三角形
int dp[MAX][MAX];               


int main()
{
int n;
while(cin >> n)
{
for(int i=0;i<n;++i)
{
for(int j=0;j<=i;++j)
{
cin >> map[i][j];
}
}
for(int i=0;i<n;++i)
{
dp[n-1][i] = map[n-1][i];
}
for(int i=n-2;i>=0;i--)
{
for(int j=0;j<=i;++j)
{
dp[i][j] = map[i][j] + max(dp[i+1][j],dp[i+1][j+1]);
}
}
cout << dp[0][0] << endl;
}
return 0;
 } 


接下来,我们在对这段代码进行优化,我们不需要一个二维数组来保存每一个数字的最大和,首先我们用数组dp指向三角形的最后一行map[n-1],然后从最底层开始循环,逐步填充dp数组,最后最大和就是dp[0]

代码:

#include<iostream>
using namespace std;
const int MAX=110;
int map[MAX][MAX];
int *dp;


int main()
{
int n;
while(cin >> n)
{
for(int i=0;i<n;++i)
{
for(int j=0;j<=i;++j)
{
cin >> map[i][j];
}
}
dp = map[n-1];
for(int i=n-2;i>=0;i--)
{
for(int j=0;j<=i;++j)
{
dp[j]=max(dp[j],dp[j+1]) + map[i][j]; 
}
}
cout << dp[0] << endl;
}
return 0;
 } 

参考博客:http://blog.youkuaiyun.com/baidu_28312631/article/details/47418773

动态规划从入门到精通(一)-入门篇 大三的春招,由于自己的不足,过得十分艰难。在各大公司的笔试题中,动态规划是一个必考点。突然冒出一个想法,写一个“动态规划从入门到精通”系列,与各大网友一起交流学习。 学习动态规划,愚认为,就是解决以下的三个问题: 什么是动态规划?什么时候要用动态规划?怎么使用动态规划? 让我们一个一个来解决! 1、什么是动态规划? 这里参考百度百科,动态规划是求解决策过程最优化的数学方法。把多阶段过程转... 阅读详情

相关推荐

SpringBoot3 + OAuth2.1实战:5分钟搞定授权码模式(含完整代码)

本文详细介绍了如何在SpringBoot3环境中快速实现OAuth2.1的授权码模式,包括环境配置、核心安全实现及完整代码示例。通过Spring Security集成,开发者可以高效构建企业级安全认证系统,解决版本兼容性问题,提升开发效率。

weixin_29216353的博客 140

教你彻底学会动态规划——入门篇

动态规划相信大家都知道,动态规划算法也是新手在刚接触算法设计时很苦恼的问题,有时候觉得难以理解,但是真正理解之后,就会觉得动态规划其实并没有想象中那么难。网上也有很多关于讲解动态规划的文章,大多都是叙述概念,讲解原理,让人觉得晦涩难懂,即使一时间看懂了,发现当自己做题的时候又会觉得无所适从。我觉得,理解算法最重要的还是在于练习,只有通过自己练习,才可以更快地提升。话不多说,接下来,下面我就...

常敲代码手不抖 41万+

在游戏开发中如何使用Unity3D引擎开发麻将游戏

总体来说使用Unity3D引擎开发麻将游戏需要开发人员熟练掌握Unity3D的各种功能和API,并且需要深入了解麻将游戏的规则和背景,以便实现一个质量高、玩法丰富的游戏。在测试的过程中我们需要检查游戏是否符合规则,保证游戏逻辑的正确性,并检查游戏的UI是否和设计图一致,保证游戏的可玩性。Unity3D引擎是一个高度集成的游戏开发工具,可以为开发人员提供很多强大的工具和功能,包括3D建模、物理模拟、粒子系统、动画等等,在游戏开发中可以提高开发效率和游戏质量。在开始开发之前我们需要明确游戏的需求和功能。

a272857154的专栏 1889

动态规划—入门篇

动态规划之斐波那契数列

Wu_L7的博客 1264

陀螺仪及四元数解算

陀螺仪 四元数

zb313982521的博客 2004

Python+QMT量化交易实战:从零搭建你的第一个极速策略(附完整代码)

本文提供了一份详细的Python+QMT量化交易实战指南,手把手教你从零搭建一个可回测、可实盘的极速策略。内容涵盖环境配置、QMT核心机制解析、双均线策略的完整代码实现、回测优化方法以及实盘部署要点,帮助量化交易新手快速入门并掌握核心开发流程。

b9c0d的博客 1012

【动态规划专题】—— 动态规划思想入门篇

动态规划三部曲

欢迎来到我的世界 412

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 484

小白学习动态规划:入门篇

入门动态规划个人总结 一、动态规划概念 1. 什么是动态规划 ​ 动态规划应用于拥有以下特点的问题:一般需要使用动态规划时,该问题的解可以由更小的解得出,例如:当求单位为n的最优解时,可以转换为求第n-1个单位的最优解······也就是说问题的解可以根据子问题的解求出。 2. 动态规划问题的特点 ① 问题具有最优子结构性质。 如果问题的最优解所包含的子问题的解也是最优的,那么该问题具有最优子结...

欢迎来到「小菠萝」的博客 692

微信小程序- 云开发上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。(小程序上传部署云函数提示错误,开发控制台中的云函数没有删除,详细排查)

微信小程序——云函数上传失败,微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。微信小程序上传云函数失败,微信小程序云开发|Error: ResourceNotFound.FunctionName, FunctionName 指定的资源不存在。微信云开发报错(Error: ResourceNotFound.FunctionName,微信小程序云函数报错,上传云函数 sum 失败 Error:,上传部署我们的云函数 2. 报错 错误信息

🏆 前端领域优质创作者 4315

YOLO26 网络结构逐模块解析:Backbone/Neck/Head

本文解析了YOLO26目标检测网络的架构设计,重点介绍其在Backbone、Neck和Head三个核心组件的创新优化。Backbone采用改进的CSP模块与轻量级注意力机制,提升特征提取效率;Neck使用改进的BiFPN结构实现高效多尺度特征融合;Head采用完全解耦设计简化回归流程。文章详细分析了各模块的技术演进、实现细节和设计思想,通过流程图和代码示例展示了YOLO26的整体架构和关键组件实现。该研究对模型优化、定制开发和硬件部署具有重要指导意义。

一键难忘的博客 1245

动态规划(DP)-入门篇

本文精讲动态规划核心,对比递归与迭代实现,通过经典案例助你掌握解题框架

不会C++、害怕嵌入式且不爱看动漫的小趴菜 1万+

图解联合概率密度、边缘概率密度、条件概率密度之间的关系

简要图解联合概率密度、边缘概率密度、条件概率密度之间的关系

一个搬运知识的笨小孩 2万+

剑指offer-动态规划入门篇

结合剑指offer讲解几道经典的动态规划题目,适合初学者初步了解动态规划思想。​ 动态规划算法 通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。 ​

xsj5211314的博客 2832

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

动态规划从入门到入土——入门篇

一、什么是动态规划? 要先理解动态规划的话,我们要先知道什么叫“分治”思想。 这就要提一下分治的祖师爷了——大禹 当面对波涛汹涌的洪水,人力显得多么的苍白无力,然鹅,大佬站出来了,提出:我们把洪水不断的分流,然后对每一条支流进行处理就可以处理好洪水了。 那么分治思想就是:大事化小,小事化无 与此同时,动态规划算是分治思想的延伸,它主要是把原问题分治为各个大问题,把大问题分解成各个小问题,然后保存各...

qq_45349785的博客 315

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

关于动态规划(入门篇)

关于动态规划(入门篇)                                                                                                  作者:焦祺         09-02-26    题记:网上DP总结如云……但较于杂乱,对新手的入门无层次渐进的指导,故写此篇。 动态规划的启蒙题目题目:P

互联网产品管理、交互、设计、开发、用户体验专栏 5369

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

动态规划算法入门篇:何为动态规划?

动态规划是一种用于求解最优化问题的算法,其核心思想是通过将复杂问题分解为多个相互重叠的子问题,构建最优解与这些子问题之间的递推关系,避免重复计算,高效得出全局最优解。

qq_64247568的博客 674
上一篇: 用JFrame做一个简单的窗体
下一篇: upper_bound和lower_bound区分
顺顺不吃竹笋
博客等级 码龄10年 32粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值