动态规划稍稍总结
首先介绍一下动态规划是什么?
动态规划算法通常是基于一个递推公式及一个或多个初始状态,当前子问题的解将有上一次子问题的解得出。
实用动态规划来解题只需要多项式的时间复杂度,因此它比回溯法、暴力法等快上很多。
那么怎么才能确定用动态规划的题目来解题呢?
我们用一个例子来引入:
https://leetcode-cn.com/problems/unique-paths/
其实关键之处要用动态规划解题的关键之处就是如何找到状态、状态转移方程和边界情况3大部分。
那么如何找到so-called状态和状态转移方程呢?奉上链接
https://www.deeplearn.me/216.html
正如上文作者所说的那样,“根据子问题定义状态,你找到子问题,状态也就浮现出来了”。那么怎样找子问题呢?往往很多时候我们是这样做的:目前的问题比较大,我们将其几个子问题进行求解,这种思想在很多算法思想中可以找到,比如典型的分治递归法。
上文作者提到,“首先我们思考一个问题,如何用最少的硬币凑够i元(i<11)?为什么要这么问呢? 两个原因:1.当我们遇到一个大问题时,总是习惯把问题的规模变小,这样便于分析讨论。 2.这个规模变小后的问题和原来的问题是同质的,除了规模变小,其它的都是一样的, 本质上它还是同一个问题(规模变小后的问题其实是原问题的子问题)。”这两点其实启发我们将问题进行分解求解。这样的思维很是常见。如果我们学会了分解问题来求解,那个我们距离定义状态和状态转移方程就不远了。
最后加上多刷题,you can do it!!!
2021.2.4更【动态规划】
上面写的动态规划是我完全没有系统刷动态规划题的感受,对dp仅有的认识就是本科学的动态规划,像矩阵链连乘、三角形的田野如何收取最多的胡萝卜、0-1背包等。
经过一些比较基础的动态规划的训练之后,要说一些感受:
1.本科学动态规划仅仅是分析几个经典的例子,但是没有系统的讲方法论,然而动态规划是有方法论的
2.动态规划看起来比较难,但实际上并非如此,我曾经一度认为动态规划超级超级难,因为想不到这个问题要用动态规划的思想解题,但是经过一些训练,才发现动态规划真的没有那么难!
3.动态规划真的需要有前人的经验之说,最好有高人指点,因为动态规划很容易走入坑中
4.很多很多问题都可以转化为0-1背包问题、完全背包问题,这个一定要重视!
5.万物皆可dp...
本文来自博客园,作者:小粥超人_小hi_Hygge,转载请注明原文链接:https://www.cnblogs.com/hygge-98-areas/p/14110026.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!