day38|动态规划-爬楼梯问题

news/2025/2/21 2:49:18/

DP问题类型:

动态规划比较重要的是找到前后两个状态之间的联系,在向后遍历的过程中注意遍历的顺序和初始化操作。
动归基础类问题
背包问题
打家劫舍
股票问题
子序列问题

DP问题的一些注意事项:

动态规划类的问题代码都是比较简洁的,按照dp打印逻辑观察打印出来的数值。

  1. dp数组以及下标的含义dp[i][j],dp[i]
  2. 递推公式
  3. dp数组的初始化,有时候初始化成1,有时候初始化成0,有时候从某个下标开始初始化成1
  4. 遍历顺序:两层for循环的顺序是怎样的
  5. 打印dp数组:纠正动态规划的问题

509. 斐波那契数

复习动归五部曲:
dp数组-初始化-递推公式-遍历顺序-打印dp数组
入门级别的问题
图片: https://uploader.shimo.im/f/XY7yZux8RCb3xQa0.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2ODUxMDY3OTAsImZpbGVHVUlEIjoiMjVxNVgwUk54R3VyYWQzRCIsImlhdCI6MTY4NTEwNjQ5MCwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjozNjk4MDc2Mn0.KRrt-zEIhXY5a5_d8Zts4sRalTM0t8vREKtw_s1z9Nk

class Solution:def fib(self, n: int) -> int:# 递归解法def r(n):if n == 0 : return 0if n == 1 : return 1return r(n-1) + r(n-2)return r(n)'''# 动态规划方法dp = [0] * (n+1)if n == 0 : return 0if n == 1 : return 1dp[0] = 0dp[1] = 1for i in range(2,n+1):dp[i] = dp[i-1] + dp[i-2]return dp[-1]'''''' # 一般方法if n == 0: return 0if n == 1: return 1cur = 1pre = 0i = 2while i<=n:temp = curcur = pre + curpre = tempi += 1return cur'''

70. 爬楼梯

核心思路: 第i个台阶收到前1个台阶和倒数第二个台阶影响
问题的思考方式是先那几个进行举例,然后找到其中的规律。三阶可以用一阶和二阶楼梯进行推导。
dp五部曲进行思考:

  1. 确定dp[i]含义:第i个台阶的上楼的种类
  2. 递推公式:dp[i] = dp[i-1] + dp[i-2]
  3. 数组的初始化:dp[0] = 0 dp[1] = 1
  4. 遍历方式:从前往后
  5. 打印dp数组
class Solution:def climbStairs(self, n: int) -> int:# 当前楼梯走几步受到之前两个台阶的影响。# 根据dp五部曲进行求解dp = [0] * (n+1)if n == 0: return 0if n == 1: return 1dp[0] = 1dp[1] = 1for i in range(2,n+1):dp[i] = dp[i-1] + dp[i-2]return dp[n]

746. 使用最小花费爬楼梯

有两个数组cost[i],当前台阶的花费受到前两个台阶花费的影响。
dp五步曲进行思考:

  1. dp[i]含义:第i个台阶的最小花费
  2. 递推公式:dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
  3. dp数组的初始化:dp[0] = 0,dp[1] = 0
  4. 遍历方式:从前往后
  5. 打印dp数组
class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:dp = [0]*(len(cost)+1)if len(cost) <=1 : return 0dp[0] = 0dp[1] = 0for i in range(2,len(cost)+1):dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])return dp[len(cost)]

http://www.ppmy.cn/news/96428.html

相关文章

2.== 和 equals 的区别是什么?

解读 对于基本类型和引用类型 的作用效果是不同的&#xff0c;如下所示&#xff1a; 基本类型&#xff1a;比较的是值是否相同&#xff1b;引用类型&#xff1a;比较的是引用是否相同&#xff1b; 代码示例&#xff1a; String x "string"; String y "st…

服务器上的项目从Gitee上拉取,并且避免重新安装依赖

如果您已经在本地电脑上对项目进行了修改并将其同步到了Gitee上&#xff0c;现在希望将服务器上的文件与Gitee同步&#xff0c;并且避免重新安装依赖&#xff0c;您可以按照以下步骤进行操作&#xff1a; 1. 在服务器上&#xff0c;进入Flask项目的目录。您可以使用命令行终端…

curl 工具的使用

curl是Linux下的命令行工具,用于传输数据。它支持多种网络协议,可以轻松抓取URL、上传文件等。 curl的基本语法是: curl [选项] [URL]常用的选项有: -X :指定请求方法,如GET, POST, PUT等-d :发送POST请求的数据,字符串形式-H :添加请求头-u :用户名和密码-b :使用cookie信息…

Linux-0.11 文件系统pipe.c详解

Linux-0.11 文件系统pipe.c详解 模块简介 在Linux-0.11中提供了管道这种进程间通讯的方式。本程序包含了管道文件读写操作函数read_pipe()和write_pipe()。 函数详解 read_pipe int read_pipe(struct m_inode * inode, char * buf, int count)该函数是读管道的方法。 函数…

第4章 Container

第4章 Container reference 引用 Declaring references Reference is a new way to manipulate objects in C – char c; // a character – char* p &c; // a pointer to a character – char &r c; // a reference to a character 区分指针*: int* p &…

C#调用FreeSpire.PDF获取PDF文档中使用的字体

除了图片之外&#xff0c;电子文件中使用的字体都必须要在本机中安装才能正常查看文字&#xff08;word缺少字体的话会自动使用相似或默认字体&#xff09;&#xff0c;要想知道电子文件中使用的字体&#xff0c;可以将电子文件转换为PDF文件&#xff08;如果是打印成PDF的话&a…

C++环形缓冲区设计与实现:从原理到应用的全方位解析

C环形缓冲区设计与实现&#xff1a;从原理到应用的全方位解析 一、环形缓冲区基础理论解析&#xff08;Basic Theory of Circular Buffer&#xff09;1.1 环形缓冲区的定义与作用&#xff08;Definition and Function of Circular Buffer&#xff09;1.2 环形缓冲区的基本原理&…

Visual Studio2022编译器实用调试技巧

目录 1.什么是bug 2.调试是什么&#xff1f; 3.debug和release的介绍 4.windows环境调试介绍 4.1 调试环境的准备 4.2 学会快捷键 4.3 调试的时候查看程序当前信息 4.4 查看内存信息 5.如果写出好&#xff08;易于调试&#xff09;的代码 7.编程常见的错误 1.什么是b…