动态规划初识心得

今天开始了动态规划算法,经过三道题的洗礼,再加上文档的帮助,我找到了规律(只是从这三道题,并不一定适合所有动态规划)。

比如:509.斐波那契数:对于这道题,一定是要从前向后计算,因为题目中给出的时h0=0和h1=1,这也相当于知道了规律的前两项,根据题目可以得到h2=h1+h0,推导出递推公式hx=hx-1+hx-2。我们需要一个数组

来保存每次计算出的结果,因此可以这么写:

javascript 复制代码
var fib = function (n) {
            let arr = []//设置数组保存每次计算出的结果
            arr[0] = 0, arr[1] = 1//递推公式通过数组实现
            if (n === 0 || n === 1) return n
            for (let i = 2; i <= n; i++) {
                arr[i] = arr[i - 1] + arr[i - 2]
            }
            return arr[arr.length - 1]//返回数组的最后一个元素,
        };
  1. 爬楼梯 :这道题没有明说规律,但是我们可以通过自己的计算来得到。当台阶总数为0,方法只有0种,即h0=0;当台阶数为1时,方法有1一种,即h1=1;当台阶数为2时,方法有\[1,1,2]两种,即h2=2;当台阶数为3时,方法有\[1,1,1,1,2,2,1]三种,即h3=3。由此可以看出这道题的递推公式也是hx=hx-1+hx-2。所以代码与上一道题相同。
  2. 使用最小花费爬楼梯 :这道题相对前两道是比较难的,因为这对找递推公式前两项是非常困难的。但是我们可以想一下,要找到到每一台阶的花费,即需要前一层跳到该层的费用以及跳到前一层的最低花费。写成递推公式就是hn=Math.min(hn-1+costn-1,hn-2+costn-2)。解释一下:因为每一次可以跳一层或者两层,所以第n层的花费就是前一层跳跃的花费加上跳到前一层的最低花费之和以及前两层跳跃的花费加上跳到前两层的最低花费之和的最小值。代码如下:
javascript 复制代码
        var minCostClimbingStairs = function (cost) {
            let arr = []
            arr[0] = 0, arr[1] = 0//根据上面的递推公式求出数组的前两项
            if (cost.length === 1 || cost.length === 0) return 0
            for (let i = 2; i <= cost.length; i++) {
                arr[i] = Math.min(arr[i - 1] + cost[i - 1], arr[i - 2] + cost[i - 2])
            }
            return arr[arr.length - 1]
        };

以上三道题都是符合开头所说的规则。

相关推荐
民乐团扒谱机5 小时前
【微科普】压缩感知(CS):违反了奈奎斯特采样定理?不先采集也能还原信号?大白话讲透稀疏采样、L1重建与OMP,一文吃透附代码
python·神经网络·线性代数·算法·数学建模·压缩感知·奈奎斯特
88号技师5 小时前
2026年SCI-分数牛顿衍生优化算法Fractional Newton-derived optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
夏玉林的学习之路6 小时前
算法7.链式栈
算法
啊嘞嘞?6 小时前
力扣(回文链表)
算法·leetcode·链表
Awh-6 小时前
数据结构 第六章:哈希存储
数据结构·算法·哈希算法
M78佐菲6 小时前
Linux学习笔记:目录IO与帧缓冲
linux·笔记·学习·算法
玫瑰互动GEO6 小时前
抖音SEO优化技术拆解:搜索排名四大因子与4步落地算法分析
人工智能·算法·搜索引擎·语音识别
Interview Aid1126 小时前
Akuna OA 题目拆解|三题思路复盘
linux·运维·算法·面试·职场和发展
wabs6667 小时前
关于栈【力扣150.逆波兰表达式求值的思考】
数据结构·c++·算法·leetcode··代码随想录
ZGi.ai7 小时前
ZGI 父子分块:连接检索片段与完整上下文
人工智能·算法·知识库·企业ai·zgi·父子分块