动态规划-学习记录1
目标
看了十二届蓝桥杯的大题,动态规划(Dynamic Programming)似乎用得很多,今天希望初步理解动态规划的思想,并能够利用它来解决相关简单问题。
是什么
动态规划是求解最优解的过程,求解最优解这类问题一般都能用dp解决。
怎么做
dp没有统一的处理方法,必须根据问题的各种性质并结合一定的技巧来处理。
这里为了方便理解,参考了知乎-告别动态规划...和博客园-五大常用算法之二:动态规划算法。
问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个n级的台阶总共有多少种跳法。
分析问题,可以发现以下几点:
1.要求该青蛙跳上一个n级的台阶总共有多少种跳法,只需求它跳上n-1级和n-2级台阶的跳法,相加即可。
2.定义一个数组储存其跳法总数:dp[台阶级数] = 跳至该级台阶的跳法总数,那么以上关系即可表示为dp[n] = dp[n-1]+dp[n-2]。相应地,dp[n-1] = dp[(n-1)-1]+dp[(n-1)-2]......
3.依照这种关系递推下去,可得出初始时:dp[2]=2,dp[1]=1。
以上这三点,对应着动态规划应用时的三个子目标:
1.建立状态转移方程
2.缓存并复用以往结果
3.寻找边界条件
以下是针对上面问题所作的c语言程序
}
优点
动态规划和递归有类似之处,但动态规划可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,运用dp,可以拿空间换时间,有着递归不可比拟的优势。
总结
动态规划应用时的三个子目标:
1.建立状态转移方程
2.缓存并复用以往结果
3.寻找边界条件
参考资料
知乎-如何理解动态规划?
知乎-告别动态规划...
博客园-五大常用算法之二:动态规划算法
__EOF__

本文链接:https://www.cnblogs.com/OtusScops/p/14675510.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!