千锤百炼算法系列之动态规划

题外话

这段时间,我必须把算法弄明白

这篇直接讲解动态规划所有细节!

前面那篇

千锤百炼之每日算法(一)-CSDN博客

也有关于动态规划的讲解,也非常详细

很简单,我成尊不就是了?!!!

正题

动态规划

这里我们主要是让大家明白什么是动态规划,怎么用动态规划解题

我就不用那些官方的东西了

让我们直接上例题!!

第n个泰波那契数

泰波那契序列 Tn 定义如下: 

T0 = 0, T1 = 1, T2 = 1, 且在 n >= 0 的条件下 Tn+3 = Tn + Tn+1 + Tn+2

给你整数 n,请返回第 n 个泰波那契数 Tn 的值。

先说一下动态规划的步骤

动态规划步骤

1.动态表示

我们所用的动态表示不同,进行下面步骤的时候也会有一些区别

一道题可能有多种动态表示,也有可能只有一种

什么是动态表示呢?

就是我们根据题目信息所找到的dp[i]

像这道题我们可以设置dp[i]为第i个位置的泰波那契值

2.动态转移公式

动态转移公式是根据动态表示和题目信息所得到的

所以动态表示不同,我们的动态哦转移公式肯定是不同的

那么动态转移公式是什么呢?

就是dp[i]等于从题目信息中提取出的信息所建立的公式

咱们这道题比较简单,动态转移公式相当于直接在题目中给出了

dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

这很显而易见吧,相信大家都能理解嗷

3.初始化

①我们有了动态转移公式,但是我们没有值

我们需要从dp[0],dp[1],dp[2]一直算到dp[n],也就是从左到右的顺序

我们如果想求dp[3]的话是不是需要知道dp[0],dp[1],dp[2],它们三个的值

但是我们根本没有它们三个的值,所以这个时候就需要根据题干信息,然后将我们公式的起始点dp[0],dp[1],dp[2]进行初始化赋值

②除此之外,我们需要给i规定一个范围,大家想想

     dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

   这个公式中,i可以等于0吗?

   很显然不可以,数组越界了

   我们需要从i=3开始

4.填表顺序

填表顺序自然是从左到右,从头到尾计算

5.返回值 

根据题干要求找到正确的返回值

我们要求第n个泰波那契值

那么根据我们设立的动态表示

返回值就是dp[n]

代码详解

public int test01(int n) {
    //我们i从3开始,我们需要处理一下,n=0,1,2的情况
    if (n==0)
    {
        return 0;
    }
    if (n==1||n==2)
    {
        return 1;
    }


    //1.创建动态表示
    //我们要求dp[n],那么就应该有n+1个元素
    int[] dp=new int[n+1];
    //2.创建动态转移方程
    //3.初始化
    //4.填表顺序
    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];
}

空间优化(滚动数组)

我们这道题其实还可以空间优化一下

根据动态转移公式dp[i]=dp[i-1]+dp[i-2]+dp[i-3]

我们只需要四个变量,就可以完成这个操作

如下图

代码详解

    //我们i从3开始,我们需要处理一下,n=0,1,2的情况
    if (n==0)
    {
        return 0;
    }
    if (n==1||n==2)
    {
        return 1;
    }
   
   //直接初始化a,b,c,d
    int a=0;
    int b=1;
    int c=1;
    int d=0;
    for (int i = 3; i <=n; i++) {
       d=a+b+c;
        //计算完d的值,将b赋值给a,c赋值给b,d赋值给c
        a=b;
        b=c;
        c=d;
    }
    return d;
}

小结

落魄谷中寒风吹

春秋蝉鸣少年归

荡魂山处石人泪

定仙游走魔向北

逆流河上万仙退

爱情不敌坚持泪

宿命天成命中败

仙尊悔而我不悔

继续学习去了!

麻烦家人们一键三连!!!(点赞,关注,收藏!!!)

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

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

相关文章

IEC104协议

1. 简介 IEC104规约是一个广泛应用于电力、城市轨道交通等行业的国际标准。 2. 术语解释 遥脉 (电度量)&#xff1a; 是指对现场某装置所发出的脉冲信号进行周期累计的一种远程计数操作。 其实&#xff0c;遥脉也可以看成是被具体规定了采用脉冲计数作为测量方法的一种遥测…

【软考经验分享】软考-中级-嵌入式备考

这里写目录标题 教辅用书嵌入式系统设计师考试大纲嵌入式系统设计师教程嵌入式系统设计师5天修炼嵌入式系统设计师考前冲刺100题 刷题软件希赛网软考真题 视频教程希赛网王道-计组计网 教辅用书 嵌入式系统设计师考试大纲 50页左右&#xff0c;内容为罗列一些考点&#xff0c…

信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】

[TOC](信息化工作人员必备常识3——nslookup命令【用来诊断域名(DNS) 基础结构的信息以及用来查看域名和IP的对应关系】) 前言 信息化相关的工作人员&#xff0c;无论你是开发人员、产品经理、CIO领导&#xff0c;你只要是在做信息化相关的工作&#xff0c;有些基础知识和操作…

C#版Facefusion:让你的脸与世界融为一体!-05 人脸增强

C#版Facefusion&#xff1a;让你的脸与世界融为一体&#xff01;-05 人脸增强 目录 说明 效果 模型信息 项目 代码 下载 说明 C#版Facefusion一共有如下5个步骤&#xff1a; 1、使用yoloface_8n.onnx进行人脸检测 2、使用2dfan4.onnx获取人脸关键点 3、使用arcface_w60…

基于MNIST的手写数字识别

上次我们基于CIFAR-10训练一个图像分类器&#xff0c;梳理了一下训练模型的全过程&#xff0c;并且对卷积神经网络有了一定的理解&#xff0c;我们再在GPU上搭建一个手写的数字识别cnn网络&#xff0c;加深巩固一下 步骤 加载数据集定义神经网络定义损失函数训练网络测试网络 …

小扎万字深度访谈:最强开源大模型Llama 3发布,Meta的AGI路径和开源哲学

今天Meta发布了史上最强开源大模型Llama 3&#xff0c;一口气发布了 8B 和 70B 2个预训练和指令微调模型&#xff0c;对比同级别的参数模型&#xff0c;性能上均达到了最佳。 此外&#xff0c;Meta还发布了基于Llama 3的AI助手Meta AI&#xff0c;可以在Facebook、Instagram、W…

一举颠覆Transformer!最新Mamba结合方案刷新多个SOTA,单张GPU即可处理140k

还记得前段时间爆火的Jamba吗&#xff1f; Jamba是世界上第一个生产级的Mamba大模型&#xff0c;它将基于结构化状态空间模型 (SSM) 的 Mamba 模型与 transformer 架构相结合&#xff0c;取两种架构之长&#xff0c;达到模型质量和效率兼得的效果。 在吞吐量和效率等关键衡量指…

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型

基于函数计算FC3.0 部署AI数字绘画stable-diffusion自定义模型 部署AI数字绘画stable-diffusion曲线救国授权github账号 部署ffmpeg-app-v3总结 在讲述了函数计算FC3.0和函数计算FC2.0的操作界面UI改版以及在函数管理、函数执行引擎、自定义域名、函数授权及弹性伸缩规则方面进…

【管理咨询宝藏82】麦肯锡某化工企业战略咨询报告

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏82】麦肯锡某化工企业战略咨询报告 【格式】PPT版本&#xff0c;可以编辑 【关键词】战略咨询、MBB、业务规划 【核心观点】 - 打造面向客户的…

ROS2 仿真学习02 Gazebo导入官方示例模型

1.下载模型 git clone https://gitee.com/bingda-robot/gazebo_models.git将gazebo_models拖到到.gazebo当中&#xff08;如果没看到.gazebo文件请按住CTRLh&#xff09; 2.添加模型到gazebo的Insert 这就将官方示例的模型都导入到Gazebo 了 随便试试一个模型

SLS 查询新范式:使用 SPL 对日志进行交互式探索

作者&#xff1a;无哲 引言 在构建现代数据和业务系统的过程中&#xff0c;可观测性已经变得至关重要&#xff0c;日志服务&#xff08;SLS&#xff09;为 Log/Trace/Metric 数据提供了大规模、低成本、高性能的一站式平台服务&#xff0c;并提供数据采集、加工、投递、分析、…

海外平台运营为什么需要静态住宅IP?

在世界经济高度全球化的今天&#xff0c;许多企业家和电子商务卖家纷纷转向海外平台进行业务扩展。像亚马逊、eBay这样的跨国电商平台为卖家提供了巨大的机会&#xff0c;来接触到世界各地的顾客。然而&#xff0c;在这些平台上成功运营&#xff0c;尤其是维持账号的健康和安全…

脚本开发与自动化运维

shell脚本开发 grep搜索工具 参数&#xff1a; -A<显示行数>&#xff1a;-A NUM, --after-context NUM&#xff0c;除了显示符合范本样式的那一行之 外&#xff0c;并显示该行之后的内容。 -B<显示行数>&#xff1a;--before-context NUM&#xff0c;除了显示…

使用51单片机控制T0和T1分别间隔1秒2秒亮灭逻辑

#include <reg51.h>sbit LED1 P1^0; // 设置LED1灯的接口 sbit LED2 P1^1; // 设置LED2灯的接口unsigned int cnt1 0; // 设置LED1灯的定时器溢出次数 unsigned int cnt2 0; // 设置LED2灯的定时器溢出次数// 定时器T0 void Init_Timer0() {TMOD | 0x01;; // 定时器…

数据分析师平均薪资18322,这11个行业需求量最大!

2024年&#xff0c;是一个被数据深刻影响的时代。数据&#xff0c;如同无形的燃料&#xff0c;驱动着现代社会的运转。从全球互联网用户每天产生的2.5亿TB数据&#xff0c;到制造业的传感器、金融交易、医疗病历等各个领域的海量信息&#xff0c;数据的量级每年都在呈指数级增长…

Linux 内核设备树 ranges属性

今天有人问了我一下ranges属性&#xff0c;找了相关资料确认后&#xff0c;记录一下&#xff1a; 参考资料链接&#xff1a;让你完全理解linux内核设备树ranges属性地址转换 - vkang - 博客园 (cnblogs.com) ranges属性定义如下&#xff1a; ranges < local_address pa…

SAP专家级实施商解读:SAP S/4HANA Cloud(PCE私有云) 的五大误解

五个关于SAP S/4HANA Cloud&#xff08;PCE私有云&#xff09;的重要疑问&#xff1a; ■ SAP太贵了&#xff1f; ■ SAP S/4HANA Cloud 只适用于大型企业&#xff1f; ■ ERP项目&#xff0c;尤其是 SAP 解决方案&#xff0c;太耗时了&#xff1f; ■ ERP项目/云项目没有优势&…

JAVA学习笔记29(集合)

1.集合 ​ *集合分为&#xff1a;单列集合、双列集合 ​ *Collection 接口有两个重要子接口 List Set&#xff0c;实现子类为单列集合 ​ *Map接口实现子类为双列集合&#xff0c;存放的King–Value ​ *集合体系图 1.1 Collection接口 1.接口实现类特点 1.collection实现…

PL_to_PS中断传输数据

PL_to_PS中断传输数据 实验功能&#xff1a;将PL端的数据存入BRAM&#xff0c;然后在PS端读出数据&#xff0c;用串口打印。通过中断来触发 参考文章&#xff1a; https://www.cnblogs.com/fhyfhy/p/11760986.html [ZYNQ_PS与PL通过BRAM交互&#xff08;三&#xff1a;PSPL读…

MyBatis 框架学习(II)

MyBatis 框架学习(II) 文章目录 MyBatis 框架学习(II)1. 介绍2. 准备&测试2.1 配置数据库连接字符串和MyBatis2.2 编写持久层代码 3. MyBatis XML基础操作3.1 Insert 操作3.2 Delete 操作3.3 Update 操作3.4 Select 操作 4. #{} 与 ${}的使用5. 动态SQL操作5.1 < if >…