메모리: 113112 KB, 시간: 104 ms
다이나믹 프로그래밍(dp)
정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 7가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다.
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. n은 양수이며 11보다 작다.
각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.
점화식을 찾는데 계산 실수를 해서 생각보다 오래걸렸다.
3까지는 규칙이 따로 없고, 그 뒤부터는 이전 3개의 값을 더해주면 된다.
1, 2, 4, 7, 13, 24, 44 ....
import sys
T = int(sys.stdin.readline())
for _ in range(T) :
N = int(sys.stdin.readline())
dp = [1] * 12
dp[2] = 2
dp[3] = 4
if N > 3 :
for i in range(3, N + 1) :
dp[i] = dp[i-3] + dp[i-2] + dp[i-1]
print(dp[N])