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

代码随想录刷题第38天

今天正式进入动态规划。首先了解了动态规划的基本问题与动规五步曲:1.明确DP数组与下标含义;2.给出递推公式;3.初始化DP数组;4.明确遍历顺序;5.打印DP数组。

第一题是斐波那契数https://leetcode.cn/problems/fibonacci-number/submissions/503671190/,根据以上五步曲,由于本题中递推公式与初始化题目均已给出,所以本题没有需要额外思考内容。

class Solution {
public:int fib(int n) {if (n <= 1) return n;vector<int> dp(n + 1);dp[0] = 1;dp[1] = 1;for (int i = 2; i <= n; i++){dp[i] = dp[i - 1] + dp[i - 2];}return dp[n - 1];}
};

递归代码如下:

class Solution {
public:int fib(int n) {if (n < 2) return n;return fib(n - 1) + fib(n - 2);}
};

第二题是爬楼梯https://leetcode.cn/problems/climbing-stairs/description/,根据动态规划五步曲,首先确定dp[i]即为到达第i阶的方法数量,由于每次只能上一或二个台阶,所以dp[i]只与dp[i-1],dp[i-2]有关,dp[i] = dp[i-1]+dp[i-2]。初始化dp[1]=1,dp[2]=2,从前向后遍历dp数组即可。

class Solution {
public:int climbStairs(int n) {if (n <= 2) return n;vector<int> dp(n + 1);dp[2] = 2;dp[1] = 1;for (int i = 3; i <= n; i++){dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];}
};

第三题是花费最小代价爬楼梯https://leetcode.cn/problems/min-cost-climbing-stairs/submissions/503688178/,还是动规五步曲,给出dp[i]:到达第i层所花费的最小体力。由于一次上楼梯的次数限制,故dp[i]只与dp[i-1],dp[i-2]有关,取两者到达第i层花费体力的最小值可得:dp[i] = min(dp[i -1] + cost[i - 1], dp[i - 2] + cost[i - 2]。初始化dp[0]=dp[1]=0,从前向后遍历dp数组。

class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {vector<int> dp(cost.size() + 1);dp[0] = 0;dp[1] = 0;for (int i = 2; i <= cost.size(); i++){dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);}return dp[cost.size()];}
};

不得不说,动态规划还是比贪心要清晰的多,五步曲YYDS

相关文章:

  • Docker中如何删除某个镜像
  • 【微服务生态】Docker
  • 洛谷 P3879 阅读理解
  • 重学Java 18.学生管理系统项目
  • Windows 获取内存 API 汇总及使用方法
  • Python编程技巧 – 装饰器
  • HCIA-HarmonyOS设备开发认证V2.0-IOT硬件子系统-GPIO
  • 深入理解java虚拟机---自动内存管理
  • 一.重新回炉Spring Framework: 理解Spring IoC
  • Python第十九章(模块)
  • PyCharm 新建目录 (directory or folder)
  • JavaScript 设计模式之组合模式
  • ubuntu 22.04 图文安装
  • Java使用Redis实现分页功能
  • 微服务中4种应对跨库Join的思路
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • CSS实用技巧干货
  • JS题目及答案整理
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • MySQL主从复制读写分离及奇怪的问题
  • Python爬虫--- 1.3 BS4库的解析器
  • 后端_ThinkPHP5
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 深入浅出webpack学习(1)--核心概念
  • 支付宝花15年解决的这个问题,顶得上做出十个支付宝 ...
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • (11)MATLAB PCA+SVM 人脸识别
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (转)c++ std::pair 与 std::make
  • (转)ObjectiveC 深浅拷贝学习
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .gitignore文件_Git:.gitignore
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 表达式计算:Expression Evaluator
  • .net 验证控件和javaScript的冲突问题
  • .NET 中创建支持集合初始化器的类型
  • .NET关于 跳过SSL中遇到的问题
  • .net实现客户区延伸至至非客户区
  • .NET使用存储过程实现对数据库的增删改查
  • /dev/VolGroup00/LogVol00:unexpected inconsistency;run fsck manually
  • @synthesize和@dynamic分别有什么作用?
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [AX]AX2012 AIF(四):文档服务应用实例
  • [BT]BUUCTF刷题第8天(3.26)
  • [bzoj4010][HNOI2015]菜肴制作_贪心_拓扑排序
  • [c语言]小课堂 day2
  • [Design Pattern] 工厂方法模式
  • [HTML]Web前端开发技术18(HTML5、CSS3、JavaScript )HTML5 基础与CSS3 应用——喵喵画网页
  • [IE 技巧] 显示/隐藏IE 的菜单/工具栏
  • [JS]Math.random()随机数的二三事