虽然这和我们目前学的东西无关,但我还是要帮助一下有困难的同学。
爬楼梯
时间限制: 2000ms
空间限制: 256000kB
题目描述
一段楼梯有 n 级台阶。你每次可以跨一个、两个或者三个台阶。
请问走上 n 级台阶有几种方案?答案对 998244353 取模。
输入格式
一行一个数 n 。
输出格式
一行一个数,表示方案数。
样例
Input 1
3
Output 1
4
样例解释
1 + 1 + 1 = 3
1 + 2 = 3
2 + 1 = 3
3 = 3
数据范围
n≤1000
这题其实是一道递推题,但不知道为啥要放在记忆化搜索里……
好,既然知道了这是递推题,那么我们就应该找规律。
\color{purple}\left\{\begin{matrix} \color{red}当n=1时,ans=1 \\ \color{orange}当n=2时,ans=2 \\ \color{brown}当n=3时,ans=4 \\ \color{green}当n=4时,ans=7 \\ \color{blue}当n=5时,ans=13 \\ \color{tan}当n=6时,ans=24 \\ \end{matrix}\right.
我们通过枚举,得出了以上结论。
然后,我们就可以发现,从 4 开始,每项的 ans 都是前面三项的和。
那么,我们只需要定义 Ans_1=1,Ans_2=2,Ans_3=4 ,后面再依次计算即可。
但是,我们会发现一个问题,如果等所有都计算完后再在输出的时候模 998244353 ,会 \color{red}Wrong\space Answer\space\color{black}20 分,但是由于信友队数据不强,开 long\space long 就能过。
但是这肯定不是我们想要的,所以,我们要在循环内就模掉,以保证数据加强时,依然能够 \color{green}Accepted 。
初始化:
ans[1]=1;ans[2]=2;ans[3]=4;
循环求值:
for(int i=4~n)ans[i]=ans[i-1]+ans[i-2]+ans[i-3],ans[i]%=998244353;
最后输出 Ans_n 即可。