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

斐波那契模型系列【动态规划】

动态规划步骤

1、状态表示

是什么:dp表(可能是一维或二维数组)里的值所表示的含义。

怎么来:

1、题目要求

2、经验+题目要求

3、发现重复子问题

2、状态转移方程

dp[i]=...

3、初始化

保证填表不越界

4、填表顺序

5、返回值

写代码时,可以就按一下步骤:

1、创建dp表

2、初始化

3、填表

4、返回值 

5、可能会需要处理边界

一、第n个泰波那契数

 

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

空间优化------滚动数组

将abcd向后平移。 

class Solution {
public:int tribonacci(int n) {if(n==0) return 0;if(n==1||n==2) return 1;int a = 0,b = 1,c = 1,d;for(int i = 3;i <= n;i++){d = a+b+c;a = b;b = c;c = d;}return d;}
};

二、三步问题 

 

取模问题:每做一次加法就要做一次取模

class Solution {
public:int waysToStep(int n) {vector<int> dp(n+1);const int MOD = 1e9+7;if(n == 1||n == 2) return n;if(n == 3) return 4;dp[1] = 1,dp[2] = 2,dp[3] = 4;for(int i = 4;i <= n;i++){dp[i] = ((dp[i-1]+dp[i-2])%MOD+dp[i-3])%MOD;}return dp[n];}
};

三、最小花费爬楼梯

注意:楼顶是最后一个台阶的下一个位置。

 

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

 四、解码方法

 注意:dp[i-1]和dp[i-2]是解密成功才加的。

优化版初始化(更好处理边界)

把数组统一往后移一位,开多一位 。

class Solution {
public:int numDecodings(string s) {int n = s.size();vector<int> dp(n + 1);dp[0] = 1;dp[1] = s[0] != '0';for(int i = 2;i <= n;i++){if(s[i-1] != '0') dp[i] += dp[i-1];int t = (s[i-2]-'0')*10 + s[i-1]-'0';if(t <= 26 && t >= 10) dp[i] += dp[i-2];           }return dp[n];}
};

http://www.lryc.cn/news/181988.html

相关文章:

  • 【Java】微服务——Nacos注册中心
  • Redis Cluster Gossip Protocol: PING, PONG, MEET
  • httpserver 下载服务器demo 以及libevent版本的 httpserver
  • 构建强大的RESTful API:@RestController与@Controller的对比与应用
  • 【Java-LangChain:使用 ChatGPT API 搭建系统-10】评估(下)-当不存在一个简单的正确答案时
  • 【微服务的集成测试】python实现-附ChatGPT解析
  • Mesa新版来袭
  • 基于 SpringBoot 2.7.x 使用最新的 Elasticsearch Java API Client 之 ElasticsearchClient
  • 辅助驾驶功能开发-功能对标篇(15)-NOA领航辅助系统-吉利
  • javascript: Sorting Algorithms
  • 嵌入式Linux应用开发-驱动大全-同步与互斥④
  • 2023年【高压电工】证考试及高压电工复审模拟考试
  • C/C++学习 -- 分组密算法(3DES算法)
  • C/C++面试题总结
  • Java下正面解除警告Unchecked cast: ‘java.lang.Object‘ to ‘java.util.ArrayList‘
  • 图像处理与计算机视觉--第四章-图像滤波与增强-第二部分
  • [前端基础]typescript安装以及类型拓展
  • 网络参考资料汇总(1)
  • Remove和RemoveLast用法
  • (一) 使用 Hugo 搭建个人博客保姆级教程(上篇)
  • 数据结构之栈
  • wireshark of tshark tools v3.4.0版本 支持json
  • Python开源项目月排行 2023年9月
  • uniapp项目实践总结(二十五)苹果 ios 平台 APP 打包教程
  • MySQL查询(基础到高级)
  • 电脑通过串口助手和51单片机串口通讯
  • 【Linux】线程详解完结篇——信号量 + 线程池 + 单例模式 + 读写锁
  • 弧度、圆弧上的点、圆的半径(r)、弧长(s)之间的关系
  • [AOSP] [JNI] [Android] AOSP中使用JNI
  • GEE案例——如何使用长时序影像实现多波段图像加载(不同层土壤湿度)