https://www.acmicpc.net/problem/15988
정수 n이 주어졌을 때, n을 1, 2, 3의 합으로 나타내는 방법의 수를 구하는 문제
dp[만들고 싶은 수]
우선 기본 요소가 되는 1, 2, 3은 먼저 저장해준다.
dp[1] = 1
dp[2] = 2
dp[3] = 3
4를 만들 수 있는 경우의 수는
3까지 만들어 놓은 거에 1 추가 = dp[3]
2까지 만들어 놓은 거에 2 추가 = dp[2]
1까지 만들어 놓은 거에 3 추가 = dp[1]
즉 dp[4] = dp[3] + d[2] + dp[1]
아래와 같이 점화식을 세울 수 있다.
dp[i] = dp[i - 1] + dp[i - 2] + dp[i - 3]
#include <iostream>
using namespace std;
int t, n;
long long dp[1000001], mod = 1000000009;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> t;
dp[1] = 1, dp[2] = 2, dp[3] = 4;
for (int i = 4; i <= 1000000; i++)
dp[i] = (dp[i - 1] + dp[i - 2] + dp[i - 3]) % mod;
while (t--)
{
cin >> n;
cout << dp[n] << "\n";
}
}