Official
C - 階段の上り方 / Ways to Climb Stairs Editorial
by
C - 階段の上り方 / Ways to Climb Stairs Editorial
by
sounansya
\(d[i]\) を「\(0\) 段目から \(i\) 段目まで上る方法の数」と定義します。求める値は \(d[N]\) です。
まず \(i \in B\) である場合は \(d[i]=0\) です。それ以外の場合は \(d[i]=d[i-1]+d[i-2]+d[i-3]\) となります。
この漸化式を元に順に遷移を計算することで \(d[N]\) の値を求めることができます。
n, m = map(int, input().split())
ok = [True] * (n + 1)
if m != 0:
b = map(int, input().split())
for v in b:
ok[v] = False
d = [0] * (n + 1)
MOD = 10**9 + 7
d[0] = 1
for i in range(1, n + 1):
if not ok[i]:
continue
for k in range(3):
j = i - k - 1
if j >= 0:
d[i] += d[j]
d[i] %= MOD
print(d[n])
posted:
last update:
