问题描述
小蓝来到了一座高耸的楼梯前,楼梯共有 N 级台阶,从第 0 级台阶出发。小蓝每次可以迈上上级或2级台阶,但是,楼梯上的第 a1级、第a2 级、第 a3 级,以此类推,共 级台阶的台阶面已经坏了,不能踩上去。
现在,小蓝想要到达楼梯的顶端,也就是第 N 级台阶,但他不能踩到坏了的台阶上,请问他有多少种不踩坏了的台阶到达顶端的方案数?
由于方案数很大,请输出其对 109+7取模的结果。
输入格式
第一行包含两个正整数 N(1≤ N≤ 10°)和 M(0≤ M≤N),表示楼梯的总级数和坏了的台阶数。
接下来一行,包含 M 个正整数 a」,Q2,·..,am(1 ≤ al < a2 <a3 < aM ≤ N),表示坏掉的台阶的编号
输出格式
输出一个整数,表示小蓝到达楼梯顶端的方案数,对109+7取模。
n,M=map(int,input().split())
Bad=list(map(int,input().split()))
dp = [0]*(n+1)
vis = [0]*(n+1)
for x in Bad:
vis[x]=1
dp[0]=1
dp[1]=1-vis[1]
for i in range(2,n+1):
if vis[1] == 1:
continue
dp[i]=(dp[i-1]+dp[i-2])%1000000007
print(dp[n])
#仅供本人知识归纳