数组的每个下标作为一个阶梯,第 i 个阶梯对应着一个非负数的体力花费值 cost[i](下标从 0 开始)。

    每当你爬上一个阶梯你都要花费对应的体力值,一旦支付了相应的体力值,你就可以选择向上爬一个阶梯或者爬两个阶梯。

    请你找出达到楼层顶部的最低花费。在开始时,你可以选择从下标为 0 或 1 的元素作为初始阶梯。

    分析:爬楼梯进阶版!
    相当于每节楼梯有一个过路费,你需要支付那个过路费才可以通过;
    所以使用动态规划时需要比较走一步过路费低还是走两步过路费低,当然这种是贪心的思路,不是动归的思路,动归是比较前两个哪个低,就选哪个

    第一步:确定dp[i]含义:指在当前格需要的最小花费
    第二步:如何得到:前两个的最小花费加上当前格的花费
    第三步:初值?题目是从第0阶开始的,也就是第0阶就需要花费体力。初值需要前两格,即dp[0]=cost[0],dp[1]=cost[1];

    参考代码:
    public int minCostClimbingStairs(int[] cost) {
    if(cost.length==0) return 0;
    if(cost.length==1) return cost[1];

    int[] dp = new int[cost.length];
    dp[0]=cost[0];
    dp[1]=cost[1];
    for(int i=2;i dp[i]=cost[i]+Math.min(dp[i-1],dp[i-2]);
    }

    return Math.min(dp[cost.length-1],dp[cost.length-2]);
    }