| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【算法模板】动态规划(基础DP篇) -> 正文阅读 |
|
[数据结构与算法]【算法模板】动态规划(基础DP篇) |
【算法模板】动态规划(基础DP篇)
前言博主因最近刷的大部分都是动态规划的算法题,所以也把博主所刷的心得和习题在本篇文章中总结分享给大家,并且希望能帮助到大家。 感谢: 什么是动态规划?动态规划 (英语:Dynamic programming,简称 简单的就是说:用简单的方法来解决复杂的问题! 核心思想: 动态规划的核心就是 有记忆,减少不必要的计算! 动态规划的做题方法一般我们在做动态规划这种题的时候一般会有一下这几个步骤:
我们只要上述的几个步骤没有出现什么问题的话,那么这个这个题也就是手到擒拿了! 而上述步骤中比较难的就是 动态规划推导公式 的推导,一般在做题时我们很容易的知道这个题是用动态规划来解决这个问题。但是每次就会卡到动态规划推导公式这个地方(不要问我为什么5555)。所以这个也是我们需要提高的地方!!! 给大家一些 建议 ,在做动态规划题的时候 一定要自己推导自己的动态规划推导公式 ,就算写不出来我们在看题解的时候也可以那我们自己推导出来的公式和官方的公式进行一个对比,每次在做题的时候只要能保证这点,则以后的进步就会越来越大!!! 一维DP简介在上面我们已经知道了什么是 DP 了,那么什么又是 一维DP 呢? 一维DP: 通常的讲 一维DP 就是通过一维的数组来满足 推导公式 的一个求解。
走进一维DP上述中我们知道了什么是 一维DP ,那我们就要来走进这个它,并且征服它!同学们来看下面的例题吧。 例题: 题目:
示例:
做题步骤: 还记得我们第一步需要怎么来分析的吗? 第一步我们需要确定这题的 DP 数组该怎么去创建? 第二步需要我们推导出本题的 DP 公式。 第三步进行循环得到我们需要的结果。 思路: 通过做题步骤我们能知道这个 DP数组 的长度是 题目所说从 1 后面开始每一项的数字都是前两项的和。通过解析这句话我们能知道我们的 循环是从2开始,到n结束 。而推导公式则就是:
当我们完成上述的步骤时接下来就是将这题给实现了。 代码: Python版本:
Java版本:
我们做了一个比较简单的DP题,那我们再来看另外一个简单的DP问题吧 题目:
示例:
做题步骤: DP数组 的创建。 推导出本题的 DP 公式。 进行循环。 思路: 在题目的含义中我们已经知道了 用最小的花费来达到顶楼! 则我们需要创建的 DP数组 长度就为 动态规划公式:
代码: Python版本
Java版本:
OK,例题看完了,接下来就是来看习题了哦!!! 模块练习题
二维DP上述中我们了解了什么是一维DP,接下来就是简单的 二维DP 。 简介什么是 二维DP 呢? 我们知道我们使用一个一维数组就是 一维DP ,那么我们在 一维DP 里面再套一个 一维DP数组 则这个就是一个 二维DP 。简单来说 二维DP 就是 一维DP 中再包含一个 一维DP 。 走进二维DP题目:
示例:
做题步骤: 我们能通过题目知道这是一个二维的空间,机器人能在这个二维空间经行 思路: 当然啦,二维DP 当然要定义二维数组,推导公式是按照自己的需要来的。 本题的二维数组则就是网格的长和宽:
因为机器人只能向下和向右移动: 一种是从 (i-1, j) 这个位置走一步到达 一种是从(i, j - 1) 这个位置走一步到达 所以我们能得到其走到每个格子的路径(左边界和上边界的起始值都是1)的推导公式:相邻的左格子和上格子相加。
循环则就需要嵌套循环,并且从(1,1)开始。 代码: Python版本
Java版本:
OK,下面是整理好的一些 二维DP 习题。 模块练习题
总结OK,今天的分享就到这里啦,希望本篇文章能够帮助屏幕前的你!大家看完不要忘了来个三联,这将会是博主最大的动力!!! 溜了溜了,吃饭去了888888。 下期见! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:04:02- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |