动态规划
无论是动态规划还是递归,都有两个关键点:【状态】+【选择】
1.动态规划--自顶向下
动态规划无非就是利用【历史记录】避免重复计算。那就使用一个备忘录嘛,在递归的时候如果相关记录存在就直接返回, 不用重复计算。
递归思路:递归的技巧就是管好当下(有哪些【选择】),之后的事情抛给递归【状态也发生了变化】
明确函数功能:确定可以递归解决的问题
找递归式:每次递归,问题的规模应该减小
出口:找到临界条件
综述:就是在递归的基础之上增加了一个备忘录容器对象
# python的functools模块提供了一个lru_cache装饰器,是缓存指定次数的装饰器
@lru_cache()
def func(x):
if(x<=1):
return 1
return func(x-1)+func(x-2)
private HashMap<String,Integer> memo=new HashMap<>();
public Integer func(int x){
if xxx in memo:
return xxx;
func(x-1) ...
}
2.动态规划之---自底向上
动态规划无非就是利用【历史记录】避免重复计算。自底向上采用的是循环的方式,将历史记录