听到 动态规划 这个响亮的大名你可能已经望而却步,那是因为这个响亮的名字真的真的很具有迷惑性,不像递归、回溯和贪心等等算法一样,其文即其意,而动态规划则不同,很容易望文生义,真可谓害人不浅,今天我就带大家一起扒一扒 动态规划 的裤子。
第一点,大家在学习动态规划时切忌望文生义,因为其名字与其思想八竿子打不着。你可以自己起一个能让自己记住其思想的名字更好,比如递推公式法,状态转移方程法等等。
第二点,与其说动态规划是一个算法,还不如说是解决问题的方法论。
第三点,动态规划的一般形式就是求最优值,比如最长公共子序列、最大子段和、最优二叉搜索树等等。
废话不多说,进入正题!
动态规划的基本思想
动态规划算法与分治法类似,其基本思想就是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只有多项式量级。在用分治法求解时