在准备福大复试的时候看到了动态规划,就想着顺便到力扣上刷题,强化对动态规划的理解。
首先给出动态规划在书上的定义:
在启发式算法——A算法中,h(n),即从结点n到目标节点的最短路径散耗值的预估值趋近于0时,评估函数f(n)=g(n),直接等于从初始结点到当前结点n的最短路径散耗值,这时,A算法演变为动态规划算法。
动态规划实质上是对分支限界的改进,避免计算已经计算过的结点。
class Solution:
tmp = {0: 0, 1: 1}
def fib(self, n):
if n in self.tmp:
return self.tmp[n]
result=self.fib(n-1)+self.fib(n-2)
self.tmp[n]=result
return result
思路:动态规划
斐波那契数列使用递归即可求解,此处增加了一个tmp字典来记录已经计算过的结点。将代码倒二行去除即可对比使用动态规划和不使用动态规划的区别