首页 > 其他分享 >Day32 动态规划Part1

Day32 动态规划Part1

时间:2024-08-17 13:15:23浏览次数:5  
标签:return int Day32 花费 Part1 cost 爬楼梯 动态 dp

目录

任务

509. 斐波那契数

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:

F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。

思路

dp[i]表示i这一项的斐波那契值,它为前两项的和,求F(n)就是求dp(n)的值

class Solution:
    def fib(self, n: int) -> int:
        if n==0: return 0
        dp = [0]* (n+1)
        dp[1] = 1
        for i in range(2,n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[n]

70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

思路

dp[i]表示爬到第i阶有的方法,它等于爬到它上一层的方法和爬到它之前的两层的方法之和。

class Solution:
    def climbStairs(self, n: int) -> int:
        if n==1: return 1
        dp = [0] * (n+1)
        dp[1] = 1
        dp[2] = 2
        for i in range(3,n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[n]

746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。

你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。

请你计算并返回达到楼梯顶部的最低花费。

思路

dp[i]表示爬到当前层需要的最低花费,终止就是求爬到哨兵层的花费(最后一层的后一层)

class Solution:
    def minCostClimbingStairs(self, cost: List[int]) -> int:
        if len(cost) == 1: return cost[0]
        dp = [0] * (len(cost)+1)
        dp[0] = 0
        dp[1] = 0
        for i in range(2,len(cost)+1):
            dp[i] = min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]) # dp[i] 跳到第i个台阶所用的最小花费(前面跳到当前所需要的花费+跳到前面的花费),假设最右边的len(cost)索引为哨兵
        
        return dp[len(cost)]

心得体会

DP问题的思路:

  1. 思考dp[i]的含义
  2. 思考递推公式
  3. 确认终止索引及遍历范围
  4. 确认初始条件等

标签:return,int,Day32,花费,Part1,cost,爬楼梯,动态,dp
From: https://www.cnblogs.com/haohaoscnblogs/p/18364272

相关文章

  • 代码随想录day32 || 509 斐波那契数列,70 爬楼梯,746 最小代价爬楼梯
    509斐波那契数列funcfib(nint)int{ //dp五部曲 //1dp数组含义以及下标含义:本题保存的是完整的斐波那契数列,i对应数列的第i个数字 //2递推公式:F(n)=F(n-1)+F(n-2) //3dp数组初始化:由递推公式推到,0,1两位需要手动赋值,否则,oor //4遍历顺序:求......
  • 元素偏移(offset,scroll,client)介绍,动态设置类名
    文章目录一offset,scroll,client简单介绍二、scroll系列1scrollWidth2scrollHeight3scrollTop4scrollLeft三、offset系列1.offsetHeight2.offsetWidth3.offsetTop4.offsetLeft四client系列1clientTop2clientLeft3clientWidth4clientHeight五案例1动态设置......
  • 嵌入式学习DAY32---Linux软件编程---网络编程
    目录一、抓包软件的使用1.1.wireshark         1.作用1.2.UDP包头二、TCP编程2.1.发送信息1.创建套接字2.配置目的对象信息3.将自己的端口和ip和套接字绑定4.建立连接5.发消息6.关闭套接字2.2.接收消息1.创建套接字2.配置自己的信息并将自己的端口和i......
  • linq快速动态获取数据库表字段名称、类型、数据
     varbj="Bj";             varpbj=typeof(Xs_xx).GetProperty(bj);//获得班级属性      /*      varcxbj=fromaainsjklj.Xs_xx            lety=(string)pbj.GetValue(aa,null)//linq......
  • 0236-RLTK-渲染动态字符
    环境Time2022-11-29WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标在前一节的基础上,将静止的字符进行移动。Component#[derive(Component)]structPosition{x:i32,y:i32,}#[derive(Component)]st......
  • java opencv 去噪+动态自适应二值化
    //连接opencvSystem.setProperty("java.awt.headless","false");System.out.println(System.getProperty("java.library.path"));URLurl=ClassLoader.getSystemResource("lib/opencv/opencv_java4100.dll");System.load(url.getPa......
  • 力扣 | 动态规划 | 状态机 | 买卖股票 | 买卖股票的最佳时机
    文章目录一、309.买卖股票的最佳时机含冷冻期二、714.买卖股票的最佳时机含手续费三、123.买卖股票的最佳时机III四、188.买卖股票的最佳时机IV本质上这种属于动态规划题目但又有多种状态的,我们只需要正确定义出状态即可。可能每个人定义的状态不一样,但只要是对......
  • 动态内存分配
    在堆中开辟空间malloc:申请连续空间calloc:申请空间且初始化数据realloc:修改空间大小free:释放空间open:打开文件close:关闭文件......
  • 「代码随想录算法训练营」第三十九天 | 动态规划 part12
    115.不同的子序列题目链接:https://leetcode.cn/problems/distinct-subsequences/文章讲解:https://programmercarl.com/0115.不同的子序列.html题目难度:困难视频讲解:https://www.bilibili.com/video/BV1fG4y1m75Q/题目状态:看题解思路:动态规划数组初始化创建一个二维动......
  • Day 33 动态规划 Part10
    300.最长递增子序列动态规划的版本是挺好理解的,dp[i]代表了以第i个数字结尾的最长递增子序列的长度,dp[0]显然为1。dp如何更新呢?i>0:dp[i]=在i之前,最大的小于nums[i]的数nums[j]dp[i]=dp[j]+1,所以就是需要找到比nums[i]小的最大的数,遍历就可以得到。classSolution......