03.爬楼梯
关于dp[i] = dp[i - 1] + dp[i - 2] 的思考
到达dp[i-1]的方法总数,不管方法总数是怎样麻烦,都到了dp[i-1]了,到了dp[i-1],那么每种方法的再加+1,就到了dp[i],dp[i-2]+2同理,但是要注意就算dp[i-1]总数+1还是dp[i-2]+2,他们的方法总数都没有变,因为只是在每种加法搭配的基础上+1或者+2而已,原方法数并没有改变。
所以dp[i] = dp[i - 1] + dp[i - 2] 。
dp[0]是什么没有意义
因为不需要从这开始。
vector<int> dp(n + 1);
//n+1是创建dp的数量大小为n+1,包括0,+1的目的就是去除0,可以从1开始。
04.使用最小花费爬楼梯
有一个各楼梯向上爬一或二的花费表,免费从下标0或者1开始,可以选择爬1或2,到达最后一层,需要再爬一层到顶层,求给出表后到顶的最小花费。
dp[i]的含义为到第i层的最小花费(还没有继续上爬,也就是i的cost花费没花),dp[i]=dp[i-1]+cost[i-1](i-1爬一层)也可以dp[i]=dp[i-2]+cost[i-2](爬两层),看那个消耗小选那个。
所以 dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
记录
以前写博客还是麻烦了,写下迷惑的点和思考过程就好。