动态规划稍稍总结

首先介绍一下动态规划是什么?

动态规划算法通常是基于一个递推公式及一个或多个初始状态,当前子问题的解将有上一次子问题的解得出。

实用动态规划来解题只需要多项式的时间复杂度,因此它比回溯法、暴力法等快上很多。

那么怎么才能确定用动态规划的题目来解题呢?

我们用一个例子来引入:

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...

posted on 2020-12-10 08:27  小粥超人_小hi_Hygge  阅读(35)  评论(0编辑  收藏  举报