


정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
우선 이 문제 또한 직관적으로 경우의 수를 구해보면,
n = 1 (1가지) 일때,
1
n = 2 (2가지) 일때,
1+1, 2
n = 3 (4가지) 일때,
1+1+1, 1+2, 2+1, 3
n = 4 (7가지) 일때,
1+1+1+1, 1+1+2, 1+2+1, 2+1+1, 2+2, 1+3, 3+1
이때 n = 4인 경우를 살펴보면,
1에 3을 더한 경우 (1+3) 1가지
(n = 1)
2에 2를 더한 경우 (1+1+2, 2+2) 2가지
(n = 2)
3에 1을 더한 경우 (1+1+1+1, 1+2+1, 2+1+1, 3+1) 4가지 (n = 3)
이에 따라 n = 4일때 dp[4] = dp[3] + dp[2] + dp[1]가 되는 것을 볼 수 있으며, 점화식을 dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]과 같이 도출할 수 있다.
t = int(input())
dp = [0, 1, 2, 4]
for i in range(4, 11):
dp.append(dp[i - 1] + dp[i - 2] + dp[i - 3])
for _ in range(t):
n = int(input())
print(dp[n])
계속해서 DP 문제를 풀고 있는데, DP 문제는 점화식을 도출해내는 것이 전부인 것같다.
https://www.acmicpc.net/problem/9095