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

算法第三十二天--动态规划part01(第九章)

一.动态规划理论基础

1.#什么是动态规划

    Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。

2..动态规划分类

1.基础题目

2.背包问题

3.打家劫舍

4.股票问题

5. 子序列问题

 3.动态规划的解题步骤:

对于动态规划问题,拆解为如下五步曲,这五步都搞清楚了,才能说把动态规划真的掌握了!

  1. 确定dp数组(dp table)以及下标的含义
  2. 确定递推公式
  3. dp数组如何初始化
  4. 确定遍历顺序
  5. 举例推导dp数组

实战训练

1.斐波那契数

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

 

思路:

  1.     确定DP数组以及其下标含义:dp[i]的定义为:第i个数的斐波那契数值是dp[i]
  2. 递推公式:dp[i] = dp[i-1] +dp[i-2]
  3. dp数组如何初始化:dp[0] = 0, dp[1] = 1
  4. 遍历顺序:从前往后
  5. 打印dp数组

 

class Solution:def fib(self, n: int) -> int:if n == 0:return 0#初始化 dp = [0]*(n+1)dp[0] = 0dp[1] = 1# 遍历顺序: 由前向后。因为后面要用到前面的状态for i in range(2, n+1):#递推公式dp[i] = dp[i-1] + dp[i-2]#  返回答案 return dp[n]

2.爬楼梯

70. 爬楼梯 - 力扣(LeetCode)

思路:

 

本题大家如果没有接触过的话,会感觉比较难,多举几个例子,就可以发现其规律。

爬到第一层楼梯有一种方法,爬到二层楼梯有两种方法。

那么第一层楼梯再跨两步就到第三层 ,第二层楼梯再跨一步就到第三层。

所以到第三层楼梯的状态可以由第二层楼梯 和 到第一层楼梯状态推导出来,那么就可以想到动态规划了。

唯一的区别是,没有讨论dp[0]应该是什么,因为dp[0]在本题没有意义!

class Solution:def climbStairs(self, n: int) -> int:#当前这个阶有多少种方法依赖于前两种#dp[i]:达到i阶有dp[i]种方法if n == 0:return 0dp = [0]*(n+1)dp[0] = 1dp[1] = 1for i in range(2, n+1):dp[i] = dp[i-1] +dp[i-2]return dp[n]

3.使用最小花费爬楼梯

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

 

class Solution:def minCostClimbingStairs(self, cost: List[int]) -> int:#dp[i] 表示下表为i时的最低消费n = len(cost)dp = [0]*(n+1)if len(cost) == 0:return 0dp[0] = 0dp[1] = 0for i in range(2, n+1):dp[i] = min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])return dp[n]

今天结束啦!动态规划开始题目比较简单没有很难!

http://www.dtcms.com/a/277621.html

相关文章:

  • 苍穹外卖@RequestBody导错包导致接收不到传入参数
  • Linux锁的概念及线程同步
  • 互斥锁详解(操作系统os)
  • VUE3(二)、路由
  • 时序预测 | Pytorch实现CNN-KAN电力负荷时间序列预测模型
  • day16~17-系统负载高故障与磁盘管理
  • 【开源项目】拆解机器学习全流程:一份GitHub手册的工程实践指南
  • Dubbo-Admin 安装与使用指南:可视化管理 Dubbo 服务
  • 基于 SpringBoot 的 REST API 与 RPC 调用的统一封装
  • Linux操作系统之信号概念启程
  • Scrapy Spider深度解析:从基础到高级应用实战
  • 基于MATLAB的Lasso回归的数据回归预测方法应用
  • 【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think
  • muduo概述
  • DVWA CSRF漏洞分析与利用
  • Leaflet面试题及答案(61-80)
  • 梯度下降算法:像下山一样找到最优解
  • opencv4.12 vs2022 cmake contrib编译
  • (一)SAP GROUP REPORTING(集团报表)集团财务合并解决方案套件
  • ERA5的UV合并成矢量并按时间维度转为nc或tif
  • Excalidraw:一款颠覆传统思维的免费开源绘图工具
  • 28.安卓逆向2-frida hook技术-逆向os文件(一)
  • 零基础完全理解视觉语言模型(VLM):从理论到代码实践
  • TASK2 夏令营:用AI做带货视频评论分析
  • 【算法】递归、搜索与回溯
  • docker运行redis指定配置+jdk17安装在centos7
  • sklearn study notes[1]
  • uView UI 组件大全
  • spring-ai-alibaba 1.0.0.2 学习(十六)——多模态
  • Python 的 MRO