https://www.acmicpc.net/problem/9461
1. 분류
다이나믹 프로그래밍
2. 풀이

첫 몇 항을 제외한 나머지 모두가 규칙에 맞춰 증가하는 형태를 이루고 있다.
P(1)부터 P(10)까지 첫 10개 숫자는 1, 1, 1, 2, 2, 3, 4, 5, 7, 9이다.
3이 쓰여진 삼각형의 한쪽 변에 1, 2 삼각형,
4가 쓰여진 삼각형의 한쪽 변에 1, 3 삼각형,
5가 쓰여진 삼각형의 한쪽 변에 1, 4 삼각형, ...
D[N] = D[N-1] + D[N-5]의 규칙에 맞춰서 증가한다.
첫 몇 항만 초기화해주고 나머지는 저대로 구하면 답을 쉽게 찾아낼 수 있다.
3. 소스코드
#include <cstdio>
unsigned long long d[100];
int main()
{
int t;
scanf("%d", &t);
d[0] = d[1] = d[2] = 1;
d[3] = d[4] = 2;
for (int i = 5; i < 100; i++)
d[i] = d[i - 1] + d[i - 5];
while (t--)
{
int n;
scanf("%d", &n);
printf("%llu\n", d[n - 1]);
}
return 0;
}
'알고리즘' 카테고리의 다른 글
| BOJ [1051] 숫자 정사각형 (0) | 2017.09.01 |
|---|---|
| BOJ [1182] 부분집합의 합 (0) | 2017.08.31 |
| BOJ [11501] 이항 계수 2 (0) | 2017.08.15 |
| BOJ [2225] 합분해 (0) | 2017.08.15 |
| BOJ [1920] 수 찾기 (0) | 2017.08.14 |