Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาจำนวนวิธีเดินขึ้นบันได (ขั้นสูงสุด 3 ขั้นได้สูงสุด k ครั้ง) ใน Python

บันได n ขั้น เดินได้ 1,2,3 ขั้นต่อครั้ง แต่เดิน 3 ขั้นได้สูงสุด k ครั้ง หาจำนวนวิธีเดินถึงขั้น n

ตัวอย่าง: n=5, k=2 → 13 วิธี

Dynamic Programming

  • memo[j][i]: วิธีเดิน i ขั้น โดยใช้ขั้น 3 ได้สูงสุด j ครั้ง
  • Base: memo[j][0]=1, [1]=1, [2]=2
  • Transition: ถ้า i//3 ≤ j → memo[j][i] = memo[j][i-1]+memo[j][i-2]+memo[j][i-3] มิฉะนั้น memo[j][i] = memo[j][i-1]+memo[j][i-2]+memo[j-1][i-3]

การนำไปใช้

class Solution:
    def solve(self, n, k):
        if n == 0: return 1
        if n == 1: return 1
        k = min(k, n)
        memo = [[0]*(n+1) for _ in range(k+1)]
        for r in range(k+1):
            memo[r][0] = memo[r][1] = 1
            memo[r][2] = 2
        for i in range(3, n+1):
            memo[0][i] = memo[0][i-1] + memo[0][i-2]
        for j in range(1, k+1):
            for i in range(3, n+1):
                count = i // 3
                if count <= j:
                    memo[j][i] = memo[j][i-1] + memo[j][i-2] + memo[j][i-3]
                else:
                    memo[j][i] = memo[j][i-1] + memo[j][i-2] + memo[j-1][i-3]
        return memo[k][n]

ob = Solution()
print(ob.solve(5, 2))  # 13