practivceAlgorithm/백준

[백준][Python] 16159 1, 2, 3 더하기 9

findTheValue 2021. 9. 28. 00:59

dp의 구성은 숫자 n을 만드는데 쓰는 숫자의 갯수(0~n개까지 썼을 시의 모든 경우를 계산)

 

import sys
input = sys.stdin.readline


MOD = 1000000009
# 숫자 n을 m개를 써서 만드는 경우의 수. n * n 까지 가능.
dp = [[0] * 1001 for _ in range(1001)]
dp[1][1] = 1

dp[2][1] = 1
dp[2][2] = 1

dp[3][1] = 1
dp[3][2] = 2
dp[3][3] = 1
for i in range(4, 1001):
    for j in range(1, i + 1):
        dp[i][j] = (dp[i - 1][j - 1] + dp[i - 2][j - 1] + dp[i - 3][j - 1]) % MOD


for _ in range(int(input())):
    n, m = map(int, input().split())

    print(sum(dp[n][:m + 1]) % MOD)