当前位置: 首页 > article >正文

力扣整理版十:动态规划(待更新)

动态规划:每一个状态由上一个状态推导出来。

---------------------------

(1) 509 斐波那契数

(2) 70 爬楼梯

(3) 746 使用最小花费爬楼梯

---------------------------

一、基础题目

1、509 斐波那契数

509. 斐波那契数 - 力扣(LeetCode)

题目描述:斐波那契数,通常用 F(n) 表示,形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是: F(0) = 0,F(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n > 1 给你n ,请计算 F(n) 。

Tips:我感觉和前面70爬楼梯的思想差不多。

------------  python  -----------

class Solution:
    def fib(self, n: int) -> int:
        if n==0:return 0
        if n==1:return 1
        pre2=0
        pre1=1
        res=0
        for _ in range(n-1):
            res=pre2+pre1
            pre2,pre1=pre1,res
        return res

2、70 爬楼梯 

70. 爬楼梯 - 力扣(LeetCode)

题目描述:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

------------  python  -----------

class Solution:
    def climbStairs(self, n: int) -> int:
        if n==1:return 1
        pre2=1
        pre1=1
        for i in range(n-1):
            sum=pre1+pre2
            pre2=pre1
            pre1=sum
        return sum

3、746 使用最小花费爬楼梯

746. 使用最小花费爬楼梯 - 力扣(LeetCode)

题目描述:数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。

------------  python  -----------

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        dp0 = 0  # 初始值,表示从起点开始不需要花费体力
        dp1 = 0  # 初始值,表示经过第一步不需要花费体力
        
        for i in range(2, len(cost) + 1):
            # 在第i步,可以选择从前一步(i-1)花费体力到达当前步,或者从前两步(i-2)花费体力到达当前步
            # 选择其中花费体力较小的路径,加上当前步的花费,得到当前步的最小花费
            dpi = min(dp1 + cost[i - 1], dp0 + cost[i - 2])
            
            dp0 = dp1  # 更新dp0为前一步的值,即上一次循环中的dp1
            dp1 = dpi  # 更新dp1为当前步的最小花费
        
        return dp1  # 返回到达楼顶的最小花费

4、62 不同路径 

题目描述:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?

------------  python  -----------

二、背包问题-背包

三、背包问题-完全背包

四、背包问题-多重背包

五、打家劫舍

六、股票问题

七、子序列-不连续

八、子序列-连续

九、子序列-编辑距离

十、子序列-回文


http://www.kler.cn/a/415050.html

相关文章:

  • 【ruby on rails】dup、deep_dup、clone的区别
  • 快速理解微服务中Fegin的概念
  • Cypress内存溢出奔溃问题汇总
  • Linux八股积累与笔记
  • 讨论JAVA、JVM与Spring
  • 大数据笔记
  • 【CLIP】3: semantic-text2image-search允许局域网访问
  • 卷积神经网络实现图像分类
  • 【HF设计模式】01-策略模式
  • 【Linux | 计网】TCP协议详解:从定义到连接管理机制
  • 【Spring源码核心篇-04】spring中refresh刷新机制的流程和实现
  • FPGA工具链及功能介绍
  • linux安装部署mysql资料
  • MFC图形函数学习12——位图操作函数
  • Jenkins-基于 SSH 实现 Jenkins 分布式
  • 远程视频验证如何改变商业安全
  • 面试手撕题积累
  • 林业产品推荐系统:Spring Boot优化策略
  • 计算机网络:网络安全
  • helm手动部署Kafka集群
  • 高级java每日一道面试题-2024年11月25日-JVM篇-说说Java对象创建过程?
  • 前端安全和解决方案
  • 在Android上使用MD工业相机的开发示例
  • Rust学习笔记_03——元组
  • 【大模型】基于LLaMA-Factory的模型高效微调
  • 高效赋能游戏业务:全面解析游戏托管服务的价值与实践