DP를 이용해서 풀 수 있는 간단한 문제. DP[i][j]를 0부터 j까지의 정수 i개를 더해서 그 합이 j가 되는 경우의 수라고 가정하자. 이는 재귀적으로, 0 <= k <= j인 k에 대해서 (0부터 임의의 수 k까지의 정수 i-1개를 더해서 합이 k인 경우의 수) 의 합이 된다. 이 모든 경우의 수에 대해, j-k를 더하면 정수 i개로 j를 나타낼 수 있기 때문.
따라서 O(KN^2)의 시간복잡도 내에 모든 경우를 구할 수 있고, N, K 모두 최대 200이므로 시간 내에 충분히 풀이 가능하다.
풀이 코드
MOD = 10**9
N, K = map(int, input().split())
dp = [[0]*(N+1) for _ in range(K+1)]
dp[0][0] = 1
for i in range(1, K+1) :
for j in range(N+1) :
for k in range(j+1) :
dp[i][j] = (dp[i][j] + dp[i-1][k]) % MOD
print(dp[-1][-1])