【C++】动态规划题目总结(随做随更)

文章目录

  • 一. 斐波那契数列模型
    • 1. 第 N 个泰波那契数
    • 2. 三步问题
    • 3. 使用最小花费爬楼梯
      • 解法一:从左往右填表
      • 解法二:从右往左填表

一. 斐波那契数列模型

解题步骤:

  1. 确定状态表示(最重要):明确dp表里的值所表示的含义
  2. 推导状态转移方程(最难):dp[i] 等于什么?
  3. 初始化:保证填表的时候不越界
  4. 填dp表:通过前面已经计算过的状态来推导当前状态的值
  5. 返回结果

1. 第 N 个泰波那契数

在这里插入图片描述

题目解析
我们对题目给的公式进行转化:

在这里插入图片描述

观察公式可以看到,如果要求第 i 个泰波那切数的话,我们只需知道前 i-1、i-2、i-3 的值即可。

算法原理

  • 状态表示:dp[i] 代表第 i 个泰波那切数
  • 状态转移方程:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
  • 初始化:dp[0] = 1、dp[1] = 1、dp[2] = 1
  • 填表:根据状态转移方程和初始化的值,使用滑动窗口的方式一直计算最终得到第 i 个泰波那切数。
  • 返回值:第 n 个泰波那切数

编写代码

class Solution {
public:int tribonacci(int n) {// 1、建表// 2、初始化// 3、填表// 4、返回值vector<int> dp(n+1);dp[0] = 0, dp[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];}
};/*
- 时间复杂度:O(n)
- 空间复杂度:O(n)
*/

2. 三步问题

在这里插入图片描述


题目解析:小孩最多一次跳三步,假设要跳到第n级台阶,那最后跳到第n级台阶时的那一步一定是下面三种情况之一:
在这里插入图片描述

所以想求跳到第n级台阶有几种方法的话,我们只需知道跳到第 n-1、n-2 和 n-3 台阶时各自有几种方法,然后把它们相加起来即可。

PS:计算时需要注意取模

算法原理

  • 状态表示:dp[i] 表示 到达i位置时,一共有多少种方法。
  • 状态转移方程:dp[i] = dp[i-1] + dp[i-2] + dp[i-3]
  • 初始化:dp[1] = 1 dp[2] = 2 dp[3] = 4
  • 填表顺序:从左往右
  • 返回值 :dp[n]

代码实现

class Solution
{
public:int waysToStep(int n){// 1、处理特殊情况if (n == 1) return 1;if (n == 2) return 2;if (n == 3) return 4;// 2、创建dp表vector<int> dp(n + 1);// 3、初始化dp[1] = 1;dp[2] = 2;dp[3] = 4;// 4、填表for (size_t i = 4; i <= n; ++i)dp[i] = ((dp[i - 1] + dp[i - 2]) % 1000000007 + dp[i - 3]) % 1000000007;// 5、返回值return dp[n];}
};/*
- 时间复杂度:O(n)
- 空间复杂度:O(n)
*/

3. 使用最小花费爬楼梯

在这里插入图片描述


题目解析
在这里插入图片描述

解法一:从左往右填表

  • 状态表示:dp[i] 表示到达i位置时的最小花费
  • 状态转移方程
    在这里插入图片描述
  • 初始化(保证填表的时候不越界):dp[0]=dp[1]=0
  • 填表顺序:从左往右
  • 返回值:因为是从0号台阶开始,所以最后一个台阶的下标为 n-1。最后返回 dp[n]

代码实现

class Solution
{
public:int minCostClimbingStairs(vector<int>& cost){// 创建dp表size_t n = cost.size();vector<int> dp(n + 1);// 填表for (size_t i = 2; i <= n; ++i)dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);// 返回值return dp[n];}
};/*
- 时间复杂度:O(n)
- 空间复杂度:O(n)
*/

解法二:从右往左填表

  • 状态表示:dp[i] 表示从i位置出发,到达楼顶,此时的最小花费

  • 状态转移方程
    在这里插入图片描述

  • 初始化:dp[n-1] = cost[n-1]、dp[n-2] = cost[n-2]

  • 填表顺序:从右往左

  • 返回值:min(dp[0], dp[1])

代码实现

class Solution
{
public:int minCostClimbingStairs(vector<int>& cost){int n = cost.size();vector<int> dp(n);dp[n - 1] = cost[n - 1];dp[n - 2] = cost[n - 2];for (int i = n - 3; i >= 0; --i)dp[i] = cost[i] + min(dp[i + 1], dp[i + 2]);return min(dp[0], dp[1]);}
};/*
- 时间复杂度:O(n)
- 空间复杂度:O(n)
*/

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

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

相关文章

数据仓库模型设计V2.0

一、数仓建模的意义 数据模型就是数据组织和存储方法&#xff0c;它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储起来之后&#xff0c;数据才能得到高性能、低成本、高效率、高质量的使用。 高性能&#xff1a;良好的数据模型能够帮助我们快速查询…

【深度学习】 Python 和 NumPy 系列教程(十):NumPy详解:2、数组操作(索引和切片、形状操作、转置操作、拼接操作)

目录 一、前言 二、实验环境 三、NumPy 0、多维数组对象&#xff08;ndarray&#xff09; 1. 多维数组的属性 1、创建数组 2、数组操作 1. 索引和切片 a. 索引 b. 切片 2. 形状操作 a. 获取数组形状 b. 改变数组形状 c. 展平数组 3. 转置操作 a. 使用.T属性 b…

智慧公厕建设的好处

在现代社会的迅猛发展中&#xff0c;智慧公厕的建设越来越受到重视。通过智慧高效管理和保持公厕整洁&#xff0c;城市形象得以提升&#xff0c;为居民提供更加便捷舒适的生活服务。本文将以智慧公厕源头厂家广州中期科技有限公司&#xff0c;大量精品项目案例&#xff0c;实景…

(手撕)数据结构--->堆

文章内容 目录 一&#xff1a;堆的相关概念与结构 二&#xff1a;堆的代码实现与重要接口代码讲解 让我们一起来学习:一种特殊的数据结构吧&#xff01;&#xff01;&#xff01;&#xff01; 一&#xff1a;堆的相关概念与结构 在前面我们已经简单的学习过了二叉树的链式存储结…

FactoryTalk View Studio

由于项目需要&#xff0c;学习了FactoryTalk View Studio的一些操作&#xff0c;这里记录一下&#xff0c;方便以后查阅&#xff0c;并且随着项目的学习&#xff0c;随时更新。 FactoryTalk View Studio FactoryTalk View Studio 安装新建一个View Site Edition工程在工程中新建…

非常详细的git-flow分支管理流程配置及使用

非常详细的git-flow分支管理流程配置及使用。 git-flow有两个涵义,一个是指软件开发领域的版本管理流程Gitflow。另一个是指git命令工具git flow。 目前业界主流的版本管理流程是Gitflow 和 trunk-based。 Gitflow流行的比较早。但是目前的流行度要低于 trunk-based模式工作…

社区团购商城小程序v18.1开源独立版+前端

新增后台清理缓存功能 修复定位权限 修复无法删除手机端管理员 11月新登录接口修复&#xff01; 修复商家付款到零钱&#xff0c; 修复会员登陆不显示头像&#xff0c; 修复无法修改会员开添加绑定

国内AI语言大模型【文心一言】介绍

一、前言 文心一言是一个知识增强的大语言模型,基于飞桨深度学习平台和文心知识增强大模型,持续从海量数据和大规模知识中融合学习具备知识增强、检索增强和对话增强的技术特色。 最近收到百度旗下产品【文心一言】的产品,抱着试一试的心态体验了一下,整体感觉:还行! 二…

【微信小程序】网络请求

环境&#xff1a;微信小程序开发工具 测试api&#xff08;随机获取猫咪靓照&#xff09;:https://api.thecatapi.com/v1/images/search?limit2 示例&#xff1a; 完整代码 request.wxml <button bind:tap"requestBtn" type"primary">网络请求&l…

TouchGFX之缓存位图

位图缓存是专用RAM缓冲区&#xff0c;应用可将位图保存&#xff08;或缓存&#xff09;在其中。 如果缓存了位图&#xff0c;在绘制位图时&#xff0c;TouchGFX将自动使用RAM缓存作为像素来源。位图缓存在许多情况下十分有用。 从RAM读取数据通常比从闪存读取要快&#xff08;特…

重新认识架构—不只是软件设计

前言 什么是架构&#xff1f; 通常情况下&#xff0c;人们对架构的认知仅限于在软件工程中的定义&#xff1a;架构主要指软件系统的结构设计&#xff0c;比如常见的SOLID准则、DDD架构。一个良好的软件架构可以帮助团队更有效地进行软件开发&#xff0c;降低维护成本&#xff0…

OpenCV之怀旧色、冰冻滤镜、熔铸滤镜

怀旧色 源码&#xff1a; void huaijiu(Mat& src,Mat& dst) {for (int h 0;h < src.rows;h ){uchar *d1 src.ptr<uchar>(h);uchar *d2 dst.ptr<uchar>(h);for (int w 0;w < src.cols;w ){int w3 3*w;int r d1[w3 2];int g d1[w3 1];int …

微信小程序——生命周期详解(代码解读)

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

网络请求【小程序】

一、get 二、post 1.获取相应数据 Page({/*** 页面的初始数据*/data: { inptValue:, isArr:[]},/*** 生命周期函数--监听页面加载*/onLoad(options) {},onSubmit(){// console.log(this.data.inptValue)//2.后台请求数据wx.request({url: https://tea.qingnian8.com/demoArt/…

c++静态成员变量与静态成员函数

一、静态成员变量 1、说明 1.1、所有对象共享同一份静态变量 1.2、编译阶段分配内存 1.3、类内声明&#xff0c;类外初始化操作 静态成员变量&#xff0c;不属于某个具体的类对象&#xff0c;多有的类对象共享同一份数据 因此静态成员变量有两种方式访问 2、…

java微服务项目整合skywalking链路追踪框架

skywalking官网网址&#xff1a;Apache SkyWalking 目录 1、安装skywalking 2、微服务接入skywalking 3、skywalking数据持久化 1、安装skywalking 下载skywalking&#xff0c;本篇文章使用的skywalking版本是8.5.0 Index of /dist/skywalkinghttps://archive.apache.org/…

RP-母版 流程图 发布和预览 团队项目

母版 创建一个模版&#xff0c;可根据形态不同引用不同母版。若不想母版受页面变化影响&#xff0c;也可以在引用时脱离母版 创建母版&#xff1a; 1) 转换为母版 2&#xff09;在母版页面中添加 母版拖放行为 拖放行为&#xff0c;在母版名称上右键&#xff0c; 、 任意…

MySQL里的查看操作

文章目录 查看当前mysql有谁连接查看数据库或者表 查看当前mysql有谁连接 show processlist;查看数据库或者表 列出所有数据库&#xff1a; show databases;查看正在使用的数据库&#xff08;必须大写&#xff09;&#xff1a; SELECT DATABASE();列出数据库中的表&#xf…

Vulnhub实战-prime1

前言 VulnHub 是一个面向信息安全爱好者和专业人士的虚拟机&#xff08;VM&#xff09;漏洞测试平台。它提供了一系列特制的漏洞测试虚拟机镜像&#xff0c;供用户通过攻击和漏洞利用的练习来提升自己的安全技能。本次&#xff0c;我们本次测试的是prime1。 一、主机发现和端…

写一篇nginx配置指南

nginx.conf配置 找到Nginx的安装目录下的nginx.conf文件&#xff0c;该文件负责Nginx的基础功能配置。 配置文件概述 Nginx的主配置文件(conf/nginx.conf)按以下结构组织&#xff1a; 配置块功能描述全局块与Nginx运行相关的全局设置events块与网络连接有关的设置http块代理…