问题标题: 酷町堂:2752 爬楼梯

0
0
已解决
张恩泽
张恩泽
高级天翼
高级天翼

2752   爬楼梯 经验值:800

不许抄袭,一旦发现,直接清空经验!

题目描述 Description

小明和同学们顺利闯过了第二关,进入第三关的时候,小明和同学们发现了一个楼梯,可是有些楼梯坏了。智慧之门门主说,只要同学们通过这个楼梯就可以游玩里面的项目,可是同学们必须为我解决一个问题,这个时候大家都迫不及待的让智慧之门门主快点说问题。智慧之门门主指着面前的楼梯说,你可以一步一级,或一步二级,也可以一步三级,但是某些台阶是坏的,即脚不能踩在上面,哪位同学能求出登上最高台阶的总方案数。小明和同学在思考?

输入描述 Input Description

第一行两个整数,第一个数为楼梯总级数n(n<50),第二个数表示有几个坏台阶m
第二行连续m个整数为坏台阶的级数。注意:数据的规模在longint范围内。

输出描述 Output Description

一个整数,表示登上最高台阶的方案数

样例输入 Sample Input

7 2 4 6

样例输出 Sample Output

6

 

 

求大佬解答!!发一下思路和核心代码就可以了


0
已采纳
蔡乐毅
蔡乐毅
高级光能
高级光能

递推,if(f[i]不是坏台阶)    f[i]=f[i-1]+f[i-2]+f[i-3];

边界:if(f[1]是坏台阶)    f[1]=0,f[2]=0,f[3]=0;

else if(f[2]是坏台阶)    f[1]=1,f[2]=0,f[3]=1;

else if(f[3]是坏台阶)    f[1]=1,f[2]=1,f[3]=0;

else    f[1]=1,f[2]=1,f[3]=2;

PS:

f要定义成全局变量;

判断坏台阶可以用bool型数组vis来判断,是坏台阶的为true,不是的为false

0
沙宸安
沙宸安
高级启示者
高级启示者

思路,这题用搜索做

返回值为往前走一步+往前走两步+往前走三步的值

如遇到坏台阶或走过头直接返回0,否则到达目的地返回1.

我要回答