动态规划
动态规划
- 将待求解的问题分解成若干个子问题
- 子问题往往不是相互独立的,有些子问题被重复计算多次
- 保存已解决的子问题的答案,在需要时再找出以求得答案,就可以避免多次重复计算
1.基本步骤
- 找出最优解的性质,并刻划其结构特点
- 递归的定义最优值
- 自顶向上的方式计算在最优值
- 根据计算最优值得到的信息,构造最优解
2.基本要素
(1)最优子结构:一个问题的最优解包含着其子问题的最优解,是一个问题能够用动态规划求解的前提。
(2)重叠子问题:当用递归求解问题时,并不是每次求解产生的子问题都是新问题,有些会反复出现,即重叠子问题。
3.方法–备忘录法
备忘录法: 记忆法搜索,它的控制结构与递归控制结构相同,它在每一次求解子问题时对已求问题进行搜索,如果已经计算过,返回结果,否则进行计算;它为每个求解的子问题存到一个表格,用时以常数的时间进行查询。
`int solve()
{
if(备忘录中包含子问题的解)
return 备忘录的值;
else
递归求解;
}
有些动态规划的问题,大家可以网上搜索大神写的解法,比如 动态规划入门经典例题:硬币找零