728x90
#include <iostream>
using namespace std;
int arr[12] = {0, 1, 2, 4, };
int T,n;
int dp(int n) {
if (n <= 3) {
return arr[n];
}
else{
if (arr[n]) {
return arr[n];
}
else {
return arr[n] = dp(n - 1) + dp(n - 2) + dp(n - 3);
}
}
}
int main() {
cin >> T;
for (int i = 0; i < T; i++) {
cin >> n;
cout << dp(n) << "\n";;
}
}
점화식은 N = N-1 + N-2 + N-3으로
만약 N = 14 이면
(1) 13을 만드는 경우의 수들의 조합에 각 + 1 (13+1 = 14)
(2) 12를 만드는 경우의 수들의 조합에 각 + 2 (12+2 = 14)
(3) 11을 만드는 경우의 수들의 조합에 각 + 3 (11+3 = 14) 을 더해주는 경우와 같다.
728x90
'문제 풀이 > 백준 알고리즘' 카테고리의 다른 글
[baekjoon 2579] 계단 오르기 - DP(동적 프로그래밍) (C++) (0) | 2021.01.16 |
---|---|
[baekjoon 1916] 최소비용 구하기 - 그래프, 다익스트라 (C++) (0) | 2021.01.14 |
[baekjoon 18870] 좌표 압축 - 정렬, 값 압축 (C++) (0) | 2021.01.08 |
[baekjoon 11726] 2xN 타일링- DP(동적 프로그래밍) (C++) (0) | 2021.01.03 |
[baekjoon 7662] 이중 우선순위 큐 - Map, MutliMap (C++) (0) | 2021.01.02 |