问题描述:
给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。
示例:
输入:cost = [10,15,30]
输出:15
解释:你将从下标为 1 的台阶开始。支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15 。
题解:
(1)DP基础知识简介
这道题属于DP(动态规划算法)入门,没有思路的话可以先想一想如何使用DP求解第N个斐波那契数列。相信如果深谙斐波那契数列精髓的话,这道题也就是小case了。
既然是DP入门题目,那就解释得详细一些。使用DP的前提要满足三点:
(1)最优化原则 (无论过程的初始状态和初始决策是什么,其余的决策都必须相对于初始决策所产生的状态构成一个最优决策序列。 原理告诉我们,一个最优问题的任何实例的最优解是由该实例的子实例的最优解组成的。一般来说,如果所求解问题对于最优性原理成立,则说明用动态规划方法有可能解决该问题。而解决问题的关键在于获取各阶段间的递推关系式)
(2)无后向性(将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又