一. 本质
递归转递推。
二. 前提
问题具有最优子结构性质。如果问题的最优解所包含的 子问题的解也是最优的,我们就称该问题具有最优子结 构性质。
无后效性。当前的若干个状态值一旦确定,则此后过程 的演变就只和这若干个状态的值有关,和之前是采取哪 种手段或经过哪条路径演变到当前的这若干个状态,没有关系。
三.动规解题的一般思路
将原问题分解为子问题
即将原问题的规模缩小,得到该问题的子问题,再将子问题进一步细化。
确定状态
用几个变量能表示当前的状态,并能通过当前的状态定义推出更大的子问题。
确定一些初始状态(边界状态)的值
如
d
p
[
1
]
=
1
dp[1]=1
dp[1]=1 或
2
2
2 等;
确定状态转移方程
由子问题转换到当前问题;
dp一般用于解决多阶段决策问题,即每个阶段都要做一个决策,全部的决策是一个决策序列,要你求一个最好的决策序列使得这个问题有最优解。
将待求解的问题分为若干个相互联系的子问题,只在第一次遇到的时候求解,然后将这个子问题的答案保存下来,下次又遇到的时候直接拿过来用即可。
d p dp dp 和分治的不同之处在于分治分解而成的子问题必须没有联系(有联系的话就包含大量重复的子问题,那么这个问题就不适宜分治,虽然分治也能解决,但是时间复杂度太大,不划算),所以用dp的问题和用分治的问题的根本区别在于分解成的子问题之间有没有联系,这些子问题有没有重叠,即有没有重复子问题、
d p dp dp和贪心的不同之处在于每一次的贪心都是做出不可撤回的决策(即每次局部最优),而在 d p dp dp中还有考察每个最优决策子序列中是否包含最优决策子序列,即是否具有最优子结构性质,贪心中每一步都只顾眼前最优,并且当前的选择是不会依赖以前的选择的,而dp,在选择的时候是从以前求出的若干个与本步骤、
相关的子问题中选最优的那个,加上这一步的值来构成这一步那个子问题的最优解、