什么是动态规划
将待求解的问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,最终获得原始问题的解,避免了对交叠子问题的重复求解
三要素:
最优子结构:每个阶段的最优状态可以从之前某个阶段直接得到
边界:问题最小(最简单)时的解
状态转移公式:从一个阶段到另一个阶段过渡的具体模式,描述的是相邻子问题的关系
情景描述:爬楼梯
小明家住二楼,每次回家经过一个有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)