從前有一只青蛙想跳臺階去等峰,若該青蛙一次可以跳上1級臺階、也可以跳上2級、還可以跳3級。那么改青蛙從第0級臺階出發,在跳上第n級臺階且在第m級臺階停留過時有多少種跳法。 輸入描述: 第一行兩個正整數,n和m m<=n 輸出描述: 一個整數,表示跳法 輸入樣例: 4 2 輸出樣例: 4
?
def count_ways(n, m):# 動態規劃數組 dp[i] 表示從0到達第i級臺階的方法數def ways_to_reach(k):if k == 0:return 1elif k == 1:return 1elif k == 2:return 2dp = [0] * (k + 1)dp[0], dp[1], dp[2] = 1, 1, 2for i in range(3, k + 1):dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]return dp[k]# 計算從起點到第m級臺階的方法數ways_to_m = ways_to_reach(m)# 計算從第m級臺階到第n級臺階的方法數ways_from_m_to_n = ways_to_reach(n - m)# 總方法數total_ways = ways_to_m * ways_from_m_to_nreturn total_ways# 輸入
n, m = map(int, input().strip().split())# 輸出
print(count_ways(n, m))