本专栏内容为:算法学习专栏,分为优选算法专栏,贪心算法专栏,动态规划专栏以及递归,搜索与回溯算法专栏四部分。 通过本专栏的深入学习,你可以了解并掌握算法。
💓博主csdn个人主页:小小unicorn
⏩专栏分类:动态规划专栏
🚚代码仓库:小小unicorn的代码仓库🚚
🌹🌹🌹关注我带你学习编程知识
题目来源
本题来源为:
题目描述
三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。
题目解析
我们模拟一下小孩上楼梯的过程,会很容易发现规律
算法原理
1.状态表示
经验+题目要求
而经验就是:以i位置为结尾+…
(对一维的dp而言,基本上就是两种:以i位置为结尾+…或者以i位置为开始+…)
…表示根据题目要求进行补充完整。
对于本题而言:
dp[i] 表示:到达i位置时,一共有多少种方法
2.状态转移方程
在推导时基本上就是:
以i位置的状态,最近的一步,来划分问题
对于本题而言:到达i位置需要分三种情况
因此状态方程为:
dp[i