代码随想录第三十三天(一刷C语言)|斐波那契数爬楼梯使用最小花费爬楼梯

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。

动态规划步骤:

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

一、斐波那契数

思路:参考carl文档

1、dp[i]的定义为:第i个数的斐波那契数值是dp[i]。

2、递推公式为: dp[i] = dp[i - 1] + dp[i - 2]。

3、dp数组初始化:dp[0] = 0,dp[1] = 1。

4、从递归公式可以看出,dp[i]是依赖于 dp[i - 1] 和 dp[i - 2],遍历的顺序为从前到后遍历。

5、自己模拟推到dp数组,debug的时候添加打印。

ledcode题目:https://leetcode.cn/problems/fibonacci-number/

AC代码:

int fib(int n){//当n <= 1时,返回nif(n <= 1)return n;//动态开辟一个int数组,大小为n+1int *dp = (int *)malloc(sizeof(int) * (n + 1));//设置0号位为0,1号为为1dp[0] = 0;dp[1] = 1;//从前向后遍历数组(i=2; i <= n; ++i),下标为n时的元素为dp[i-1] + dp[i-2]int i;for(i = 2; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}return dp[n];
}

二、爬楼梯

思路:参考carl文档

1、dp[i]的定义为: 爬到第i层楼梯,有dp[i]种方法。

2、确定递推公式:dp[i] = dp[i - 1] + dp[i - 2] 。

3、dp数组初始化:不初始化dp[0],只初始化dp[1] = 1,dp[2] = 2,从i = 3开始递推。

4、从递推公式可知遍历顺序是从前向后遍历。

5、举例当n为4的时候,dp[4] = 5。

lecode题目:https://leetcode.cn/problems/climbing-stairs/description/

AC代码:

int climbStairs(int n){//若n<=2,返回nif(n <= 2)return n;//初始化dp数组,数组大小为n+1int *dp = (int *)malloc(sizeof(int) * (n + 1));dp[0] = 0, dp[1] = 1, dp[2] = 2;//从前向后遍历数组,dp[i] = dp[i-1] + dp[i-2]int i;for(i = 3; i <= n; i++) {dp[i] = dp[i - 1] + dp[i - 2];}//返回dp[n]return dp[n];
}

三、使用最小花费爬楼梯

思路:参考carl文档

1、dp[i]的定义为:到达第i台阶所花费的最少体力为dp[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、dp[i]由dp[i-1]dp[i-2]推出,故从前到后遍历cost数组。

5、举例推导dp数组(模拟一组cost)

ledcode题目:https://leetcode.cn/problems/min-cost-climbing-stairs/description/

AC代码:

#include <math.h>
int minCostClimbingStairs(int *cost, int costSize) {int dp[costSize + 1];dp[0] = dp[1] = 0;for (int i = 2; i <= costSize; i++) {dp[i] = fmin(dp[i - 2] + cost[i - 2], dp[i - 1] + cost[i - 1]);}return dp[costSize];
}

全篇后记:

        开启全新篇章动态规划,之前有刷过但是不成体系,希望能一刷掌握思路与方法,给后面的刷题打下坚实的基础。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JMeter逻辑控制器

JMeter逻辑控制器 一、IF控制器1、作用2、步骤 二、循环控制器1、作用2、步骤3、线程组和循环控制器的区别&#xff1f; 三、ForEach控制器1、作用2、步骤 一、IF控制器 1、作用 **控制下面的测试元素是否执行**2、步骤 添加线程组用户定义的变量添加if控制器&#xff0c;判断…

动态内存管理,malloc和calloc以及realloc函数用法

目录 一.malloc函数的介绍 malloc的用法 举个例子 注意点 浅谈数据结构里的动态分配空间 二.calloc函数的介绍 三.realloc函数的介绍 四.柔性数组的介绍 为什么有些时候动态内存函数头文件是malloc.h,有些时候却是stdlib.h 一.malloc函数的介绍 malloc其实就是动态开辟…

老卫带你学---leetcode刷题(29. 两数相除)

29. 两数相除 问题 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &…

云原生之深入解析Kubernetes中服务的性能

一、Pyroscope 简介 ① 什么是 Pyroscope&#xff1f; 开发人员通常需要查看生产应用程序中的性能瓶颈以确定问题的原因&#xff0c;为此通常需要可以通过日志和代码工具收集的信息。不幸的是&#xff0c;这种方法通常很耗时&#xff0c;并且不能提供有关潜在问题的足够详细信…

论文解读:Medical Transformer论文创新点解读

这篇文章其实就是基于Axial-DeepLab: Stand-Alone Axial-Attention forPanoptic Segmentation论文上进行的一些小创新 Stand-Alone Axial-Attention forPanoptic Segmentation论文解读&#xff1a; 论文解读&#xff1a;Axial-DeepLab: Stand-Alone Axial-Attention forPanop…

【TES720D-KIT】基于国内某厂商FMQL20S400全国产化ARM开发套件(核心板+底板)

板卡概述 TES720D-KIT是专门针对我司TES720D&#xff08;基于国内某厂商FMQL20S400的全国产化ARM核心板&#xff09;的一套开发套件&#xff0c;它包含1个TES720D核心板&#xff0c;加上一个TES720D-EXT扩展底板。 FMQL20S400是国内某厂商电子研制的全可编程融合芯片&#xf…

使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题

文章目录 一、 篇头二、 操作步骤2.1 编译AOSP AS工程文件2.2 将AOSP导入Android Studio2.3 切到Project试图2.4 等待index结束2.5 下载缺失的JDK 1.82.6 导入完成 三、 导入AS的好处3.1 本文案例演示源码编译错误AS对比同文件其余地方的调用AS错误提示依赖AS做错误修正 一、 篇…

逆向经历回顾总结

逆向经历回顾总结 一、前言 将自己的逆向经验做个总结&#xff0c;希望新手对逆向大方向能快速了解。高手有啥不一样的经验也可以讨论讨论。 二、个人经历 本人入行逆向全因一部韩剧“幽灵”&#xff0c;里面涉及渗透、病毒分析、取证的攻防对抗&#xff0c;我觉得对新手来说…

图片转HTML-screenshot-to-code

Github地址 https://github.com/abi/screenshot-to-code 在线站 Screenshot to Code 简介 这是一个基于GPT4开发的一个工具站&#xff0c;它可以基于截图生成站点代码&#xff0c;生成速度快且准确。

SpringBoot 究竟是如何跑起来的

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《SpringBoot》。&#x1f3af;&#x1f3af; &…

【MySQL 索引】InooDB 索引实现

1 索引定义 维基百科对数据库索引的定义: 数据库索引是数据库管理系统&#xff08;DBMS&#xff09;中的一个排序数据结构, 以协助快速查询和更新数据库表中的数据。 MongoDB对索引的定义: 索引是一种特殊的数据结构, 以有序和便于遍历的形式存储数据集合中特定字段或一组字段…

基于ssm服装定制系统源码和论文

idea 数据库mysql5.7 数据库链接工具&#xff1a;navcat,小海豚等 环境&#xff1a; jdk8 tomcat8.5 开发技术 ssm 基于ssm服装定制系统源码和论文751 1.1项目研究的背景 困扰管理层的许多问题当中,服装定制将是广大用户们不可忽视的一块。但是管理好服装定制又面临很多麻…

EasyV易知微助力智慧城市未来趋势发展——数字孪生城市

“智慧城市的未来趋势就是数字孪生”——《基于数字孪生的智慧城市》 城市数字化管理、智慧城市和数字孪生城市的发展是相互促进、逐步深化的过程。 城市数字化管理作为起点&#xff0c;奠定了信息化、数据化的基础&#xff1b;而智慧城市则将数字城市管理进一步升级&#xff…

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费&#xff0c;**这类消费异常的数据将会保存在死信队列中防止消息丢失&#xff0c;例如用户在商城下单成功并点击支付后&#xff0c;在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…

Springboot集成支付宝支付---完整详细步骤

网页操作步骤 1.进入支付宝开发平台—沙箱环境 使用开发者账号登录开放平台控制平台 2.点击沙箱进入沙箱环境 说明&#xff1a;沙箱环境支持的产品&#xff0c;可以在沙箱控制台 沙箱应用 > 产品列表 中查看。 3.进入沙箱&#xff0c;配置接口加签方式 在沙箱进行调试前…

Python (十) operator

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…

找不到vcomp100.dll,无法继续执行代码怎么解决

在计算机编程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中之一就是“找不到vcomp100.dll&#xff0c;无法继续执行代码”。这个错误通常出现在使用Visual Studio进行C开发时&#xff0c;它表示程序无法找到vcomp100.dll文件。vcomp100.dll是Visual C 2015 Redist…

认识产品经理以及Axure简单安装与入门

目录 一.认识产品经理 1.1.项目团队 1.2.概述 1.3.认识产品经理 1.4.产品经理工作范围 1.5.产品经理工作流程 1.6.产品经理的职责 1.7.产品经理的分类 1.8.产品经理能力要求 1.9.产品工具 1.10.产品体验报告 二.Axure简介 三.应用场景 四.安装与汉化 4.1.安装 4…

指纹浏览器有什么用?AdsPower 指纹浏览器都有哪些优势?

说到指纹浏览器&#xff0c;各位跨境卖家肯定都不陌生&#xff0c;指纹浏览器已经成为跨境电商不可或缺的有力工具&#xff0c;那么它具体有什么作用呢&#xff1f;如今市场上指纹浏览器品牌琳琅满目&#xff0c;东哥有没有什么推荐呢&#xff1f;在这里&#xff0c;东哥将为大…

matter模组有无源测试事例

测试一款matter模组的硬件性能 1.1 天线阻抗、电压驻波比测试 主要测试&#xff1a;PCB板载天线设计效率及板材PCB铜面的平整度等 1.2 模组有源数据测试 主要测试&#xff1a;模组的阻抗匹配、频偏等情况 1.3 模组传输能量精度 主要测试&#xff1a;矢量误差等数据 1.4 模…