📜  爬楼梯到达顶层的最低成本(1)

📅  最后修改于: 2023-12-03 15:27:05.392000             🧑  作者: Mango

爬楼梯到达顶层的最低成本

本题是一道动态规划问题。假设一共有n层楼梯,每次可以爬1层或2层,每层楼梯有一个对应的成本,求到达顶层的最低成本。

解题思路

我们可以用一个dp数组来记录到达每一层楼梯的最小成本,其中dp[i]表示到达第i层楼梯的最小成本。

第一步是初始化dp数组,根据题目条件,到达第1层和第2层的最小成本就是它们自己的成本。

然后考虑dp[i]的值怎么求解。因为每次可以爬1层或2层,所以到达第i层楼梯的最小成本只能从第i-1层和第i-2层转移过来,而且要选择最小的那个。因此我们可以得到转移方程:

dp[i] = min(dp[i-1], dp[i-2]) + cost[i]

其中cost[i]表示第i层楼梯的成本。

最终的答案就是到达第n层楼梯的最小成本。

代码实现
def min_cost_climbing_stairs(cost: List[int]) -> int:
    n = len(cost)
    dp = [0] * (n + 1) # 初始化dp数组
    dp[0], dp[1] = cost[0], cost[1] # 到达第1层和第2层的最小成本是它们自己的成本

    # 递推求解dp数组
    for i in range(2, n+1):
        dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1]
    
    return min(dp[n], dp[n-1]) # 最终答案是到达第n层楼梯的最小成本

测试样例

假设楼梯的成本为 [10, 15, 20],那么到达第3层楼梯的最小成本为 15(从第1层到第2层的成本为10,从第2层到第3层的成本为5),代码输出如下:

cost = [10, 15, 20]
print(min_cost_climbing_stairs(cost)) # 输出15