https://www.acmicpc.net/problem/9461




풀이



파도반 수열은 피보나치 수열과 어느정도 닮은 부분이 있는데 삼각형을 나선으로 계속 추가하는데 가장 긴 변에 삼각형을 계속 추가한다. 이러한 특성 때문에 처음에


긴변이 생기기 전까지 변의 길이는 p(1)    =    p(2)    =    p(3)    =    1 로 동일하다.


초기 값을 제외하고 이후의 값들의 규칙을 찾아보면 


p[i]    =    p[i-1] + p[i-5]; 와 같은 형태를 띄는 것을 차례대로 삼각형을 추가하며 그려보면 어렵지 않게 알 수 있다.


또는 p[i]    =    p[n-2] + p[n-3];과 같은 규칙도 띈다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int main() {
    long long int dp[101= { 0 };
    int T, N;
    
    scanf("%d"&T);
    
    dp[1= 1;
    dp[2= 1;
    dp[3= 1;
    dp[4= 2;
    dp[5= 2;
 
    for (int i = 1; i <= T; i++) {
        scanf("%d"&N);
        for (int j = 6; j <= N; j++) {
            dp[j] = dp[j - 1+ dp[j - 5];
        }
        printf("%lld\n", dp[N]);
    }
    
    return 0;
    
}
cs



'알고리즘' 카테고리의 다른 글

(11057)(DP) 백준 오르막 수  (0) 2018.07.30
(2167)(DP) 백준 2차원 배열의 합  (0) 2018.07.30
(9465)(DP) 백준 스티커  (0) 2018.07.30
(2293)(DP) 백준 동전1  (0) 2018.07.23
(1010)(DP) 백준 다리놓기  (0) 2018.07.15

+ Recent posts