문제

접근 방안

자릿수가 k 일때 1ㅁㅁㅁㅁ 이면
이때의 오르막수 갯수를 k_1이라 하면
k_1은 (k-1)_1+(k-1)_2+(k-1)_3+(k-1)_4+(k-1)_5+....(k-1)_9가 된다.
k_2는 (k-1)_2+(k-1)_3+(k-1)_4+(k-1)_5+....(k-1)_9
...
k_9는 (k-1)_9가 된다.
이를 모조리 합쳐주면 된다.
따라서 배열 dp는

dp[자릿수][9]
로 만들면 된다.

코드


#include <iostream>
using namespace std;

int main()
{
    int i;
    int row, col;
    row = 0; col = 0;
    int input;
    cin >> input;
    int** arry;
    arry = new int *[input];
    int y;
    for (i = 0; i < input; i++) {
        arry[i] = new int[10];
    }

    for (i = 0; i < 10; i++) {
        arry[0][i] = 1;
    }

    for (row = 1; row < input; row++) {
        for (col = 0; col < 10; col++) {
            y = 0;
            for (i = col; i < 10; i++) {
                y = (arry[row - 1][i] + y)%10007;
            }
            arry[row][col] = y;
        }
    }
    int result=0;
    for (col = 0; col < 10; col++) {
        result = (result + arry[input - 1][col]) % 10007;
    }
    cout << result;

    return 0;
}

'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글

백준1912 연속합  (0) 2019.02.01
백준11053번 가장 긴 증가하는 부분 수열  (0) 2019.01.31
백준1563 개근상  (0) 2019.01.30
백준11052 카드 구매하기  (0) 2019.01.25
백준10844 쉬운 계단 수  (0) 2019.01.25

+ Recent posts