动态规划做法:
上第一个台阶有1种上法
上第二个台阶有2种上法(1+1或2)
接下来的每个台阶都可以通过前两个台阶的上法数量得到(因为最大只能上两个台阶),无论是动态规划还是递归都满足这种条件。
dp[i]表示第i个台阶有几种上法
状态转移方程: dp[i] = dp[i-1] + dp[i-2]
最后dp[n]为结果。
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n,mod=998244353;
cin>>n;
vector<int> dp(n+1,0);
dp[1]=1;
dp[2]=2;
for(int i=3;i<=n;++i) dp[i]=(dp[i-1]+dp[i-2])%mod;
cout<<dp[n];
}

京公网安备 11010502036488号