Вася каждый день поднимается по одной и той же лестнице. Одним шагом он может встать на следующую ступеньку или перешагнуть через одну ступеньку. Он уже знает, сколькими способами он может подняться на верхнюю ступеньку. Но недавно он обнаружил, что некоторые ступеньки обветшали, и ступать на них небезопасно. Он составил список таких ступенек, и теперь интересуется, сколькими способами можно подняться по лестнице, не наступая на эти ступеньки. Входные данные В первой строке вводится одно натуральное число N (N ≤ 40): количество ступенек. Во второй строке вводится одно натуральное число K (K ≤ N): количество опасных ступенек. В третьей строке вводятся K различных натуральных чисел в диапазоне от 1 до N: номера опасных ступенек. Выходные данные Выведите одно число: количество способов попасть на N-ю ступеньку. Примеры входные данные 10 3 5 1 2 выходные данные 0 входные данные 3 1 2 выходные данные 1 входные данные 7 2 3 5 выходные данные 2
def count_ways(n, dangerous_steps): dp = [0] * (n + 1) dp[0] = 1 for step in dangerous_steps: dp[step] = 0 if 1 not in dangerous_steps: dp[1] = 1 for i in range(2, n + 1): if i not in dangerous_steps: dp[i] = dp[i - 1] + dp[i - 2] return dp[n] n = int(input()) k = int(input()) dangerous_steps = list(map(int, input().split())) print(count_ways(n, dangerous_steps))
Примеры
Входные данные 10 3 5 1 2 Выходные данные 0 Входные данные 3 1 2 Выходные данные 1 Входные данные 7 2 3 5 Выходные данные 2
Python
def count_ways(n, dangerous_steps):dp = [0] * (n + 1)
dp[0] = 1
for step in dangerous_steps:
dp[step] = 0
if 1 not in dangerous_steps:
dp[1] = 1
for i in range(2, n + 1):
if i not in dangerous_steps:
dp[i] = dp[i - 1] + dp[i - 2]
return dp[n]
n = int(input())
k = int(input())
dangerous_steps = list(map(int, input().split()))
print(count_ways(n, dangerous_steps))
Примеры
Входные данные10
3
5 1 2
Выходные данные
0
Входные данные
3
1
2
Выходные данные
1
Входные данные
7
2
3 5
Выходные данные
2