(十三)算法设计思想之“动态规划”

82 阅读1分钟

@TOC

动态规划是什么?

动态规划是算法设计中的一种方法 它将一个问题分解为相互重叠的子问题,通过反复求解子问题,来解决原来的问题 在这里插入图片描述 在这里插入图片描述 最大区别在于子问题是否独立,子问题相互重叠是动态规划,子问题独立就是分而治之

动态规划的步骤

定义子问题 反复执行

LeetCode:70.爬楼梯

在这里插入图片描述 解题思路 爬到第n阶可以在第n-1阶爬1个台阶,或者在第n-2阶爬2个台阶 F(n) = F(n-1) + F(n-2) 使用动态规划 解题步骤 定义子问题:F(n) = F(n-1) + F(n-2) 反复执行:从2循环到n执行上述公式 在这里插入图片描述 时间复杂度O(n),空间复杂度O(n) 在这里插入图片描述 时间复杂度O(n),空间复杂度O(1)

LeetCode:198.打家劫舍

在这里插入图片描述 解题思路 f(k) = 从前k个房屋中能偷窃到的最大数额 Ak = 第k个房屋的钱数 f(k) = max(f(k-2) + Ak,f(k - 1)) 考虑使用动态规划 解题步骤 定义子问题:f(k) = max(f(k-2) + Ak,f(k - 1)) 反复执行:从2循环到n,执行上述公式 在这里插入图片描述 时间复杂度O(n),空间复杂度O(n)在这里插入图片描述 时间复杂度O(n),空间复杂度O(1)

思考题

1、说出动态规划算法的套路步骤。 2、完成打家劫舍2,地址:leetcode-cn.com/problems/ho…