본문 바로가기
온라인저지

[BOJ] 11057번: 오르막 수

by plzfday 2018. 6. 3.

11057번: 오르막 수

풀이

우선 본 문제의 아이디어는 쉬운 계단 수에서 가져왔다.
굉장히 유사한 방법(거의 똑같다)으로 풀 수 있었다.

D[i][j]는 길이가 i이고 끝자리 숫자가 j인 오르막 수

따라서 i - 1 길이, 끝자리 숫자가 현재 j보다 작은 오르막 수들의 경우의 수를 누적 시키면 된다.

코드

#include <cstdio>

int n, D[1001][10];
const int div = 10007;

int main()
{
    scanf("%d", &n);
    for (int i = 0; i <= 9; ++i)
        D[1][i] = 1;

    for (int i = 2; i <= n; ++i)
        for (int j = 0; j <= 9; ++j)
            for (int k = 0; k <= 9; ++k)
                if (j - k >= 0)
                {
                    D[i][j] += D[i - 1][j - k];
                    D[i][j] %= div;
                }
    int sum = 0;
    for (int i = 0; i <= 9; ++i)
        sum += D[n][i] % div;
    printf("%d\n", sum % div);
    return 0;
}

'온라인저지' 카테고리의 다른 글

[BOJ] 2607번: 비슷한 단어  (0) 2018.07.12
[BOJ] 11048번: 이동하기  (0) 2018.06.04
[BOJ] 1932번: 정수 삼각형  (0) 2018.06.04
[BOJ] 1010번: 다리 놓기  (0) 2018.06.03
[BOJ] 2163번: 초콜릿 자르기  (0) 2018.06.02
[BOJ] 5622번: 다이얼  (0) 2018.06.02

댓글