什么是动态规划

将待求解的问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解

 

三要素:

最优子结构:每个阶段的最优状态可以从之前某个阶段直接得到

边界:问题最小(最简单)时的解

状态转移公式:从一个阶段到另一个阶段过渡的具体模式,描述的是相邻子问题的关系

 

情景描述:爬楼梯

小明家住二楼,每次回家经过一个有10层台阶的楼梯,小明可以每次选择一步一台阶,或者一步两个台阶,请计算小明从楼下到家一共有多少种走法

 

 

 分析过程:

  边界:F(1) = 1,F(2) = 2

  最优子结构:F(n-1) + F(n-2)

       状态转移函数:F(n) = F(n-1) + F(n-2)

代码:

 1 a = 1
 2 b = 2
 3 temp = 0
 4 
 5 def upstairs(n):
 6     if n < 1:
 7         print(0)
 8     if n == 1:
 9         print(1)
10     if n ==2:
11         print(2)
12     for i in range(3, n):
13       temp = a+ b
14         a = b
15          b = temp
16     
17     print(temp)
18 
19  upstairs(10)

 

posted on 2021-02-26 15:55  前端里的一把火  阅读(95)  评论(0编辑  收藏  举报