数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。
每当爬上一个阶梯都要花费对应的体力值,一旦支付了相应的体力值,就可以选择向上爬一个阶梯或者爬两个阶梯。
请找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。
题解
主要方法:动态规划
解决思路:对于到达当前台阶,总共有两种走法,一种是跨一个台阶即从i-1台阶走到当前位置,还有一个就是跨两个台阶走到当前位置,即从i-2台阶处走到当前位置。所以走到当前位置目前消耗的体力有两种dp[i-1]+cost[i-1] 或者 dp[i-2]+cost[i-2], 当然是取最小值,所以状态转移公式为:min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2])
class Solution:
def minCostClimbingStairs(self, cost: List[int]) -> int:
dp = [0 for i in range(len(cost)+1)]
dp[0] = dp[1]
for i in range(2, len(cost)+1):
dp[i] = min(dp[i-1] + cost[i-1], dp[i-2]+cost[i-2])
return dp[len(cost)]
❗容易忽略的点:dp的长度应该是n+1,因为要计算的是达到最高地方所消耗的体力,而dp[i]记录的是达到当前位置所消耗的体力,还有就是由于一开始可以选择在0或者1作为初始点,因此dp[0]=dp[1]=0
标签:下标,088,爬楼梯,台阶,len,阶梯,cost,LCR,dp From: https://www.cnblogs.com/zhumeili/p/18078910