初识动态规划算法(题目加解析)

news2024/9/29 7:20:50

文章目录

  • 什么是动态规划
  • 正文
    • 力扣题
      • 第 N 个泰波那契数
      • 三步问题
      • 使用最小花费爬楼梯
  • 总结

什么是动态规划

线性动态规划:是可以用一个dp表来存储内容,并且找到规律存储,按照规律存储。让第i个位置的值等于题目要求的答案
>dp表:dp表就是用一个连续的空间存储需要存储的有规律的值。

干说无力直接正文

正文

力扣题

第 N 个泰波那契数

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

给定了三个数 T0,T1,T2
求Tn的值
**根据题意可以翻译成 Tn = Tn-1+Tn-2+Tn-**3

动态规则的题目都可以分五步
1、状态表示(★)
状态表示是必须要会的并且理解的
>一般的状态表示是:经验+题目解析
经验是要多写才能得出来的
这个题目的状态表示已经给出来了
Tn的值是前三个值的合
2、状态转移方程(★)
状态转移方程一般可以表示成 第n个值=····
题目已经给出Tn=Tn-1+Tn-2+Tn-3
3、初始化
把dp表初始化成0
4、填dp表顺序
从左往右填
5、返回值
dp[n]

代码答案:

class Solution {
public:
    int tribonacci(int n) 
    {
        if(n==0)
       {
           return 0;
       }
        if(n==1||n==2)
        {
            return 1;
        }
        // vector<int> dp(n+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];
        // }
        //空间优化
        int a= 0,b=1,c=1,d=0;
        for(int i =3;i<=n;i++)
        {
            d=a+b+c;
            a=b;
            b=c;
            c=d;
        }
        return d;
    }
};

三步问题

题目:地址
题目解析:
在这里插入图片描述
题目解释:

这个小男孩一小子可以走 1层/2层/3层
走到第n层的时候有多少种方法
如果结果太大需要%1000000007

动态规划的五步走:
1、状态表示(★)
这个题目的状态表示是
在这里插入图片描述

2、状态转移方程(★)
依照上面的解释
动态方程为Tn = Tn-1+Tn-2+Tn-3
3、初始化
初始化dp表为0
4、存储dp表的顺序
从左往右
5、返回值
dp[n]

代码:

class Solution {
public:
    int waysToStep(int n) 
    {
        if(n==1||n==2)
        {
            return n;
        }
        if(n==3)
        {
            return 4;
        }
        // vector<int> dp(n+1);
        // dp[1] = 1,dp[2]=2,dp[3]=4;
        //空间优化
        int a =1,b=2,c=4,d=0;
        for(int i = 4 ;i<=n;i++)
        {
            //dp[i]=((dp[i-1]+dp[i-2])%1000000007+dp[i-3])%1000000007;
            d=((a+b)%1000000007+c)%1000000007;
            a=b;
            b=c;
            c=d;
        }
        return d;
    }
};

使用最小花费爬楼梯

题目:地址
题目解析:
在这里插入图片描述
题目解释:

一个人一下可以走1-2步
最少需要花费多少体力到楼顶
这里的楼顶不是传过来的字符串的位置
因为如果是传过来的字符串的位置那么应该不用+他的值
但是用例1来说
10直接2步到10应该是最快的
但是解释是15
所以楼顶的位置应该在传过来字符的后一个位置

五步走:

1、状态表示
在这里插入图片描述

2、状态转移方程
方程是:dp[i]=min(cost[i-1]+dp[i-1],cost[i-2]+dp[i-2])
3、初始化
把dp表初始化
4、存入dp表的位置
从做向右
5、返回值
返回dp[i]位置的值

代码:

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

总结

这三个题的是类似的
都是用前几个数来对比或者相加
可能在解释的时候有些不好理解,作者也是刚学不久,分享一下自己的看法,喜欢的可以点点赞。

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

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

相关文章

Trello软件:从功能、使用技巧到替代软件等,一文弄懂项目管理必备工具!

Trello是什么&#xff1f; Trello是一款基于Web的可视化项目管理工具&#xff0c;它旨在提供一种灵活、易于理解和使用的任务管理系统。Trello将复杂的项目管理流程简化为直观的卡片和列表&#xff0c;使团队成员能轻松看到整个项目的状态&#xff0c;并了解自己的责任和任务。…

【React设计】React企业级设计模式

Image Source : https://bugfender.com React是一个强大的JavaScript库&#xff0c;用于构建用户界面。其基于组件的体系结构和构建可重用组件的能力使其成为许多企业级应用程序的首选。然而&#xff0c;随着应用程序的规模和复杂性的增长&#xff0c;维护和扩展变得更加困难。…

面试官:说说synchronized与ReentrantLock的区别

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

python pyaudio 录取语音数据

python pyaudio 录取语音数据 pyaudio安装方法&#xff1a; pip install pyaudio如果这个不行&#xff0c;可以尝试&#xff1a; pip install pipwin pipwin install pyaudio代码如下&#xff1a; import pyaudio import waveRESPEAKER_RATE 44100 # 采样率&#xff0c;每…

LoadBalancer将服务暴露到外部实现负载均衡purelb-layer2模式配置介绍

目录 一.purelb简介 1.简介 2.purelb的layer2工作模式特点 二.layer2的配置演示 1.首先准备ipvs和arp配置环境 2.purelb部署开始 &#xff08;1&#xff09;下载purelb-complete.yaml文件并应用 &#xff08;2&#xff09;查看该有的资源是否创建完成并运行 &#xff…

数字化转型浪潮中,施耐德电气如何用技术革新引领未来?

作为一家187年的老牌企业&#xff0c;施耐德电气不仅见证了科技的演进&#xff0c;也是数字化转型潮流中的先行者。在近日的施耐德电气数字化战略暨软件创新沟通会上&#xff0c;施耐德电气全球执行副总裁&#xff0c;首席数字官Peter Weckesser&#xff1b;施耐德电气副总裁、…

MySQL笔记-第03章_基本的SELECT语句

视频链接&#xff1a;【MySQL数据库入门到大牛&#xff0c;mysql安装到优化&#xff0c;百科全书级&#xff0c;全网天花板】 文章目录 第03章_基本的SELECT语句1. SQL概述1.1 SQL背景知识1.2 SQL语言排行榜1.3 SQL 分类 2. SQL语言的规则与规范2.1 基本规则2.2 SQL大小写规范 …

PoE技术详解

标准的五类网线有四对双绞线&#xff0c;IEEE 802.3af和IEEE 802.3at允许两种用法&#xff1a;通过空闲线对供电或者数据线对供电。IEEE 802.3bt允许通过空闲线对供电、通过数据线对供电或者空闲线对和数据线对一起供电&#xff0c;如图16.1所示。 图 16.1 PoE供电线对 当在一…

2023年12月4日:多继承

代码 #include <iostream>using namespace std;class Sofa { private:string sit;int *len; public:Sofa(){cout << "Sofa::无参构造函数" << endl;}Sofa(string sit,int len):sit(sit),len(new int(len)){cout << "Sofa::有参构造函数…

力扣124. 二叉树中的最大路径和(java DFS解法)

Problem: 124. 二叉树中的最大路径和 文章目录 题目描述思路解题方法复杂度Code 题目描述 二叉树中的 路径 被定义为一条节点序列&#xff0c;序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点&#xff0c;且不一定经…

Python流程控制【侯小啾python基础领航计划 系列(十)】

Python流程控制【侯小啾python基础领航计划 系列(十)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

Redis——某马点评day03

全局唯一ID 创建一个工具类 Component public class RedisIdWorker {/*** 开始时间戳*/private static final long BEGIN_TIME_STAMP1672531200L;/*** 序列号的位数*/private static final int COUNT_BITS32;private StringRedisTemplate stringRedisTemplate;public RedisIdW…

判断是否存在重复的数

系列文章目录 进阶的卡莎C_睡觉觉觉得的博客-CSDN博客数1的个数_睡觉觉觉得的博客-CSDN博客双精度浮点数的输入输出_睡觉觉觉得的博客-CSDN博客足球联赛积分_睡觉觉觉得的博客-CSDN博客大减价(一级)_睡觉觉觉得的博客-CSDN博客小写字母的判断_睡觉觉觉得的博客-CSDN博客纸币(C…

2023年哪些行业的offer发的最多?智能制造、AIGC、AI大模型位居前三

口罩过后&#xff0c;职场现状如何&#xff1f;为何211,985毕业生也找不到工作&#xff1f;哪些行业offer多多&#xff1f; 今天我以猎聘大数据《2023届高校毕业生就业数据报告》为基础&#xff0c;带大家一起来看2023年高校毕业生就业形势。热门行业岗位、18个新赛道机会、就业…

关于使用百度开发者平台处理语音朗读问题排查

错误信息&#xff1a;"convert_offline": false, "err_detail": "16: Open api characters limit reach 需要领取完 识别和合成都要有

堆排序详细解读

简介 堆排序是一种基于二叉堆数据结构的排序算法&#xff0c;它的特点是不同于传统的比较排序算法&#xff0c;它是通过建立一个堆结构来实现的。堆排序分为两个阶段&#xff0c;首先建立堆&#xff0c;然后逐步将堆顶元素与堆的最后一个元素交换并调整堆&#xff0c;使得最大…

YOLOv3 快速上手:Windows 10上的训练环境搭建

文章目录 前言一、前期准备二、基础环境准备1. 创建虚拟环境2. 打开Terminal3. 下载YOLOv3运行环境 三、PyCharm关联3.1 运行PyCharm3.2 关联Anaconda虚拟环境 四、运行环境检查1. 检查requirements.txt文件2. 安装依赖 五、运行代码5.1 运行检测代码5.2 运行训练代码 六、常见…

Python中的类(Class)和对象(Object)

目录 一、引言 二、类&#xff08;Class&#xff09; 1、类的定义 2、类的实例化 三、对象&#xff08;Object&#xff09; 1、对象的属性 2、对象的方法 四、类和对象的继承和多态性 1、继承 2、多态性 五、类与对象的封装性 1、封装的概念 2、Python中的封装实现…

cmd查看进程信息 终止进程

cmd查看进程信息 终止进程 1、cmd查看进程信息2、终止进程 1、cmd查看进程信息 tasklist命令 描述: 该工具显示在本地或远程机器上当前运行的进程列表。 tasklist /?查看本机所有进程列表 tasklist /V根据进程名 查看jmeter进程 tasklist /V |findstr /i jmeter2、终止进程…

操作系统·设备管理

I/O系统是计算机系统的重要组成部分&#xff0c;是OS中最复杂且与硬件密切相关的部分 I/O系统的基本任务是完成用户提出的I/O请求&#xff0c;提高I/O速率以及改善I/O设备的利用率&#xff0c;方便高层进程对IO设备的使用 I/O系统包括用于实现信息输入、输出和存储功能的设备和…