动态规划经验分享

动态规划是一种优化算法,适用于解决存在重复子问题的枚举题目。它通过记忆化搜索避免重复计算,提高效率。动态规划包括记忆数组和状态转移方程两部分,其中记忆数组记录最优解,状态转移方程描述问题的解题过程。文章举例介绍了中等难度的LeetCode剑指OfferII103.最少的硬币数目和困难难度的LeetCode514.自由之路两道题目,展示动态规划的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

动态规划适用场景

动态规划的构成

动态规划解题方法

动态规划例子


动态规划适用场景

一般使用暴力搜索的题都可用动态规划进行优化。进行枚举(暴力搜索)时会出现重复的子问题,这些重复的子问题会大大增加程序运行所需时间,动态规划的出现就是解决重复子问题重复出现的情况,使用记忆数据将子问题的最优解记录下来,下次直接重记忆数组中取就好了。

动态规划的构成

1.记忆数组:在问题回溯过程中,使用记忆数组记录当前问题的最优解,方便我们在遇到重复子问题时不用再计算,直接在表中取值就行。

2.状态转移方程: 状态转移方程分为两部分

1> 初始状态:想当于出口,也就是最小子问题的直接解 (举个例子找钱,找0 元 一定是0)

2>一般状态转移方程: 每道题都有不通的求解方法,有的是求最大值,有的是求最小值,使用一般

状态转移方程来填写记忆数组。

动态规划解题方法

动态规划的解题最后的答案会存储在 记忆数组 (dp[]) 的最后一位上。

也就是你在使用住状态转移方程填表的过程就是解题的过程。记忆数组填写完毕就是答案出来的时候。

动态规划例子

中等难度: LeetCode 剑指Offer II 103.最少的硬币数目

困难难度:LeetCode 514.自由之路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值