(파이썬) 백준 4811 알약

종이에 적다보니 dp 문제인줄 알고 룰을 찾아보려 했지만 못찾았습니다.
구글링 해보니 룰이 대충 맞는데 H와 W를 분리해서 2차원 리스트를 만들어서 쓰다보니 룰을 보고 그걸 바탕으로 코드를 만들었다.

import sys
from itertools import permutations
 
 
 
 
dp = ((0)*31 for i in range(31))
 
 
 
for i in range(1,31):
    dp(0)(i) = 1
 
 
for i in range(1,31):
    for j in range(i,31):
        dp(i)(j) += dp(i-1)(j) + dp(i)(j-1)
 
 
 
while True:
 
    k = int(sys.stdin.readline())
 
    if k == 0:
        break
 
 
 
    # 즉, 앞에서 부터 1 의 개수가 0 의 개수 이상이여야 
 
 
    print(dp(k)(k))