算法(1):斐波那契数列模型

news2024/10/7 8:25:37

目录

🦁三步问题

🍉题目解析

🍉算法原理

🍒状态表示

🍒状态转移方程

🍒初始化

🍒填表顺序、返回值

🍉代码编写

🦁使用最小花费爬楼梯

🍉题目解析

🍉算法原理

🍒状态表示、状态转移方程

🍒初始化、填表顺序、返回值

🍉代码编写

🦁解码方法

🍉题目解析

🍉算法原理

🍒状态表示

🍒状态转移方程

🍒初始化

🍒填表顺序,返回值

🍉代码编写


🦁三步问题

🍉题目解析

我们可以直接按照数学的方法来进行推理,写出每一步都有几种走法,推理其中的规律

🍉算法原理

🍒状态表示

经验 + 题目要求,得到dp[ i ]

 dp[ i ]表示:到达 i 位置时,一共有多少种方法

🍒状态转移方程

以 i 位置的状态,最近的一步,来划分问题:

设到 i-3 位置一共右 x 种方法,我们的dp[ i ]表示为:达 i 位置时,一共有多少种方法

那么此时从0到达 x 位置就有dp[x]种方法,那么从 x 到 i 就有dp[i-3]种方法

同理: 

此时状态转移方程就有了:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]

🍒初始化

由于要求dp[1]的话,要从dp[-2],dp[-1],dp[0]来算,而这些都是无效的值

所以我们要初始化dp表的前三个值,根据题目推理可得

dp[1] = 1,dp[2] = 2,dp[3] = 4;

🍒填表顺序、返回值

从左往右,返回dp[n]%1000000007

🍉代码编写

🦁使用最小花费爬楼梯

🍉题目解析

 注意题目种到楼顶的位置,我们可以通过两个示例看到,楼顶的位置在数组最后的下一个位置

 每次能跳一个或两个楼梯,数组种的数代表每个楼梯花费的多少。

🍉算法原理

🍒状态表示、状态转移方程

这里的 dp[i] 表示:到达 i 位置时,最小花费。

到 i 位置有两种情况,(1)从 i-1 支付费用 cost[i-1] 到 i ,(2)从 i-2 支付费用 cost[i-2] 到 i

此时我们的状态转移方程就有了:
dp[i] = min( dp[i-1] + cost[i-1],dp[i-2] + cost[i-2])

🍒初始化、填表顺序、返回值

保证填表不越界,根据题目要求,我们要初始化的位置应该时dp[0]和dp[1]

题目中说,你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯
所以到0和1位置不用花费,所以dp[0] = dp[1] = 0;

填表顺序是:从左往右

返回值是:dp[n]

🍉代码编写

 

🦁解码方法

🍉题目解析

 

🍉算法原理

🍒状态表示

根据以往的经验,对于大多数线性 dp ,我们经验上都是[以某个位置结束或者开始]做文章,这里我们继续尝试[用i位置为结尾] 结合[题目要求]来定义状态表表示。

dp[i]表示: 以 i 结尾时,解码方法的总数

🍒状态转移方程

根据最近一步,划分问题:

  • 1)让 i 位置上的数单独解码成⼀个字⺟,就存在「解码成功」和「解码失败」两种情况:
    • 解码成功:当 i 位置上的数在 [1, 9] 之间的时候,说明 i 位置上的数是可以单独解码的,那么此时 [0, i] 区间上的解码⽅法应该等于 [0, i - 1] 区间上的解码⽅法。因为 [0, i - 1] 区间上的所有解码结果,后⾯填上⼀个 i 位置解码后的字⺟就可以了。此时 dp[i] = dp[i - 1] 
    • 解码失败:当 i 位置上的数是 0 的时候,说明 i 位置上的数是不能单独解码的,那么 此时 [0, i] 区间上不存在解码⽅法。因为 i 位置如果单独参与解码,但是解码失败了,那么前⾯做的努⼒就全部⽩费了。此时 dp[i] = 0 。
  • 2)让 i 位置上的数与 i - 1 位置上的数结合在⼀起,解码成⼀个字⺟,也存在「解码成功」 和「解码失败」两种情况:
    • 解码成功:当结合的数在 [10, 26] 之间的时候,说明 [i - 1, i] 两个位置是可以解码成功的,那么此时 [0, i] 区间上的解码⽅法应该等于 [0, i - 2 ] 区间上的解码⽅法,原因同上。此时 dp[i] = dp[i - 2] 
    • 解码失败:当结合的数在 [0, 9] 和 [27 , 99] 之间的时候,说明两个位置结合后解码失败(这⾥⼀定要注意 00 01 02 03 04 ...... 这⼏种情况),那么此时 [0, i] 区间上的解码⽅法就不存在了,原因依旧同上。此时 dp[i] = 0 。

状态转移方程:dp[i] = dp[i-1] + dp[i-2]

🍒初始化

因为我们会用到 i-1 和 i-2 位置的值,所以需要初始化前两个位置 dp[0] 和 dp[1]

  • 1)初始化 dp[0] :
    • 当 s[0] == '0' 时,没有编码⽅法,结果 dp[0] = 0 ;
    • 当 s[0] != '0' 时,能编码成功, dp[0] = 1 
  • 2)初始化 dp[1] :
    • 当 s[1] 在 [1,9] 之间时,能单独编码,此时 dp[1] += dp[0] (原因同上,dp[1] 默认为0 )
    • 当 s[0] 与 s[1] 结合后的数在 [10, 26] 之间时,说明在前两个字符中,⼜有⼀种编码⽅式,此时 dp[1] += 1

 

🍒填表顺序,返回值

填表顺序:从左往右

返回:dp[n-1]

🍉代码编写

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

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

相关文章

为什么选择STM32才是明智之选?

在电子工程领域,我们强调适用性,性能并非最重要,甚至不是首要考虑因素。选择合适的微控制器(MCU)根据设计需求而异,常规做法是在保证功能满足的前提下,选择稳定可靠且经济实惠的器件。而对于那些…

前端转换bigInt,axios拦截器失效

前端转换bigInt,axios拦截器失效 关于bigInt的使用切换雪花ID解决精度丢失问题进度丢失,前端不支持bigInt解决问题 拦截器失效验证及解决 关于bigInt的使用 这篇文章算是使用中的小笔记吧,主要是我自己搜索没找到直接的方法😓&am…

SSH隧道功能

随着互联网的普及和发展,越来越多的企业需要申请公网IP地址。(公网IP地址是指可以在互联网上直接访问的P地址,可以用于建立网站、远程办公、视频监控等应用。) 而公网IP费用较高,笔者在某搜索软件上搜了一下&#xff…

科研创新服务平台性能分析案例

前言 信息中心老师反应,用户反馈科研创新服务器平台有访问慢的情况,需要通过流量分析系统来了解系统的运行情况,此报告专门针对系统的性能数据做了分析。 信息中心已部署NetInside流量分析系统,使用流量分析系统提供实时和历史原…

笑谈测试员躺着也中枪的那些事

在近9年的软件测试职业生涯中,多少遇到一些奇奇怪怪的事。而最悲催的莫过于那些自己躺着也中枪的事,如果处理不好惹火烧身,直接被“毙掉”也不无可能。 下面就摆摆那些事儿(其中可能因人老记忆衰退严重,与事实间有一定的夸大成分&…

【字节流】复制文本文件

字节流复制文本文件 1.需求: 把“D:\\浏览器下载\\窗里窗外.txt”复制到模块目录下的“窗里窗外.txt” 2.分析: ①复制文本文件,其实就把文本文件的内容从一个文件中读取出来(数据源),然后写入另一个文件…

jenkins手把手教你从入门到放弃03-安装Jenkins时web界面出现该jenkins实例似乎已离线

简介 很久没有安装jenkins了,因为之前用的的服务器一直正常使用,令人郁闷的是,之前用jenkins一直没出过这个问题。 令人更郁闷的是,我尝试了好多个历史版本和最新版本,甚至从之前的服务器把jenkins在跑的程序打包copy…

c++避免头文件多次包含的方法

c避免头文件多次引用的方法 方法1方法2例子头文件包含多次导致类重定义使用方法1避免重复定义使用方法2避免重复定义 方法1 把#pragma once指令放在文件的开头 方法2 用 #ifndef 条件编译指令。 #ifndef _GIRL_#define _GIRL_//代码内容。 #endif 例子 头文件包含多次导致…

用百度地图api获取当前定位,获取经纬度——前端笔记

问题&#xff1a; 做一个按钮&#xff0c;点击后可以获取到当前位置的经纬度&#xff0c;并渲染地图。 效果如下: 代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>获取当前定位测试<…

极智开发 | ubuntu交叉编译aarch64 boost

欢迎关注我的公众号 [极智视界]&#xff0c;获取我的更多经验分享 大家好&#xff0c;我是极智视界&#xff0c;本文介绍一下 ubuntu交叉编译aarch64 boost。 邀您加入我的知识星球「极智视界」&#xff0c;星球内有超多好玩的项目实战源码和资源下载&#xff0c;链接&#xf…

目录穿越漏洞

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录穿越漏洞 目录穿越漏洞 目录穿越不仅可以访问服务器中的任何目录&#xff0c;还可以访问服务器中任何文件的内容。例如&#xff0c;攻击者通过浏览器访问…/……

ES6 Generator和Promise

目录 Generator 如何创建Generator函数 ? 模拟发起异步请求 Promise 实例化 实例方法 工厂函数 静态方法 Promise.all([p1,p2,....]) Promise.race([p1,p2,....]) Promise.any([p1,p2,....]) Promise.allSettled([p1,p2,....]) Generator Generator是ES6提供的一种…

Day56|583. 两个字符串的删除操作 、72. 编辑距离

583. 两个字符串的删除操作 1.题目&#xff1a; 给定两个单词 word1 和 word2 &#xff0c;返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 示例 1&#xff1a; 输入: word1 "sea", word2 "eat" 输出: …

SSD 常用概念

1. 写入放大&#xff08;WA&#xff09; 写入放大会对闪存 P / E 次数造成磨损。在存储过程中&#xff0c;数据会在闪存上被反复的移动整理&#xff0c;造成闪存上的写入量大于实际文件写入量&#xff0c;这个过程称为写放大。 写放大 主控实际写入的数据量 / 用户想要写入的数…

GDB调试——学习笔记

文章目录 GDB是什么GDB调试的一般步骤1. 编译生成带源代码信息的可执行文件2. 启动调试3. 进行调试&#xff1a;设置断点、查看变量、寻找BUG4. 退出调试 GDB是什么 GDB就是一个程序代码调试的工具。 GDBGCC开发环境 GDB调试的一般步骤 1. 编译生成带源代码信息的可执行文件…

机器学习1

核心梯度下降算法&#xff1a; import numpy as np from utils.features import prepare_for_trainingclass LinearRegression:def __init__(self,data,labels,polynomial_degree 0,sinusoid_degree 0,normalize_dataTrue):"""1.对数据进行预处理操作2.先得到…

【Linux】进程信号 -- 信号产生 | 系统调用、硬件、软件的信号发送

信号的旧识引入信号引入signal调用 系统调用向目标进程发送信号模拟实现一个kill命令raise给自己发送任意信号abort给自己发送指定信号(6)SIGABRT 硬件异常产生信号除0异常野指针访问异常 软件条件产生信号拓展 总结思考进程退出时核心转储问题小实验 信号的旧识引入 kill -l是…

手动实现 Tomcat 底层机制+ 自己设Servlet 问题分析

文章目录 手动实现 Tomcat 底层机制 自己设Servlet问题分析完成小案例运行效果 此项目用maven至于怎么配置在下一篇文章创建cal.htmlCalServlet.java# 实现步骤 web.xmlWebUtils 问题:Tomcat 整体架构分析测试分析&#xff1a;抓包情况 手动实现 Tomcat 底层机制 自己设Servlet…

ALPAGASUS : TRAINING A BETTER ALPACA WITH FEWER DATA♢

ALPAGASUS : TRAINING A BETTER ALPACA WITH FEWER DATA♢ IntroductionMethod参考 Introduction 本文证明了数据的质量的重要性要大于数量。作者通过与GPT交互的方法过滤了Alpaca52k的数据&#xff0c;剩下9k&#xff0c;对二者分别微调&#xff0c;通过实验对比&#xff0c;…

软件测试行业的困境和迷局

中国的软件测试虽然起点较高&#xff0c;但是软件测试的发展似乎没有想象中那么顺利。 其实每个行业除了有自身领域外&#xff0c;还有属于自己的“生态系统”。属于软件测试的生态系统主要包括后备软件测试人员、软件开发人员和软件管理决策者。后备软件测试人员是软件测试的…