4-2-高阶算法-动态规划

动态规划

动态规划(Dynamic Programming)是一种解决复杂问题的算法设计技术。它主要用于优化问题,即在给定的约束条件下,寻找最优解(最大值或最小值)。动态规划的核心思想是将复杂问题拆解为一系列子问题,并利用子问题的解来构建原问题的解。

class Solution:
    def climbStairs(self, n: int) -> int:
        '''
        * 动态规划四部曲:
        * 1.确定dp[i]的下标以及dp值的含义: 爬到第i层楼梯,有dp[i]种方法;
        * 2.确定动态规划的递推公式:dp[i] = dp[i-1] + dp[i-2];
        * 3.dp数组的初始化:因为提示中,1<=n<=45 所以初始化值,dp[1] = 1, dp[2] = 2;
        * 4.确定遍历顺序:分析递推公式可知当前值依赖前两个值来确定,所以递推顺序应该是从前往后;
        解释为什么dp[i] = dp[i-1] + dp[i-2]:以1为结尾或以为2结尾时,前面不管怎么走,
        这两种情况都不会出现相同的状态,所以要累加;
        '''
        if n <= 2:
            return n
        # 定义范围
        dp = [0]*(n+1)
        # 初始值
        dp[1],dp[2]=1,2
        # 迭代
        for i in range(3,n+1):
            dp[i] = dp[i-1] + dp[i-2]
        return dp[-1]

posted @ 2020-02-23 03:11  技术改变命运Andy  阅读(157)  评论(0编辑  收藏  举报