解题思路:
.
1.在数楼梯的基础上,增加了跳的条件,根据题意可以画出如上所示的图
2.每一步阶梯的状态都是由之前的楼梯跳上来的,所以是由子问题的解,构成了原问题的解,那么只需找到状态转移过程和初始化状态即可
3.小Z当前是在0阶梯上,为偶数阶梯,偶数阶梯,只能跳两级或者三级,那么阶梯2的方案数为1,阶梯3的方案数为1,阶梯1无法到达,阶梯4呢可以由阶梯2跳两级,也可以由阶梯3跳一级,所以dp【4】=dp【3】+dp【2】,阶梯5可以由阶梯1跳四级,阶梯2跳三级,那么dp【5】=dp【2】+dp【1】,至此状态转移方程找到,根据阶梯的奇偶性来找不同的决策方案。
#include<bits/stdc++.h>
using namespace std;
const int num=pow(10,9)+7;
long long dp[1000];
int main()
{
int n;
cin>>n;
dp[1]=0;
dp[2]=1;
dp[3]=1;
for(int i=4;i<=n;i++)
{
if(i%2==0)//如果是偶数台阶
{
dp[i]=(dp[i-1]%num+dp[i-2]%num)%num;
}
else//如果是奇数台阶
{
dp[i]=(dp[i-3]%num+dp[i-4]%num)%num;
}
}
cout<<dp[n];
return 0;
}