代码随想录算法训练营第n天 |
总结
动态规划5步曲:
1.确定dp数组以及下标含义
2.确定递推公式
3.dp数组如何优化
4.确定遍历顺序
5.举例推导dp数组
746. 使用最小花费爬楼梯
题目链接:
自己想
1.按照5步走,但是我先是看例子,然后模拟一下路程,之后在找到递推公式。
看完题解
完整代码
class Solution(object):
def minCostClimbingStairs(self, cost):
"""
:type cost: List[int]
:rtype: int
"""
dp = [[0 for i in range(2)] for j in range(len(cost)+1)]
dp[1][0] = cost[0]
dp[1][1] = 0
dp[2][0] = dp[1][1] + cost[1]
dp[2][1] = cost[0]
if len(cost) <=2:
return min(dp[2][0],dp[2][1])
for i in range(3,len(cost)+1):
dp[i][0] = min(dp[i-1][0],dp[i-1][1]) + cost[i-1]
dp[i][1] = min(dp[i-2][0],dp[i-2][1]) + cost[i-2]
min_count = min(dp[len(cost)][0],dp[len(cost)][1])
return min_count