0~N까지 K개의 숫자를 더해서 합이 N이 되게 하는 경우의 수를 구하라. 단, 덧셈의 순서가 바뀐 경우는 다른 경우(1+2랑 2+1는 다름)이고, 하나의 수를 여러번 쓸 수 있다.
= i를 만들기 위해 숫자 j개 더하기
K=2일때,
--> N+1개
K=3,
표를 그려보면,
i=1인 경우, dp[1][j] = 1을 만들기 위해서 j개 더하기 -> 항상 j개
j=1인 경우, dp[i][1] = 1개로 i 만들기 -> 항상 1개
를 제외하고 i>=2, j>=2에 대해서 을 만족함을 알 수 있다.
import sys
from itertools import product
input = sys.stdin.readline
N, K = map(int, input().split())
dp = [[0]*(K+1) for _ in range(N+1)]
for i in range(N+1):
dp[i][1] = 1
for i in range(K+1):
dp[1][i] = i
for i in range(2, N+1):
for j in range(2, K+1):
dp[i][j] = (dp[i-1][j]+dp[i][j-1]) % 1000000000
print(dp[N][K])