[ 백준 ] 2688 / 줄어들지 않아

金弘均·2021년 9월 15일
0

Baekjoon Online Judge

목록 보기
134/228
post-thumbnail

# Appreciation

/*
 * Problem :: 2688 / 줄어들지 않아
 *
 * Kind :: Dynamic Programming
 *
 * Insight
 * - dp[i][j] = j로 시작하는 줄어들지 않은 i자리 수
 *   + dp[i][j] = dp[i-1][j] + dp[i-1][j+1] + ... + dp[i-1][9]
 *     # 줄어들지 않은 i자리 수의 개수
 *       dp[i][0] + dp[i][1] + ... + dp[i][9]
 *
 * Point
 * - 줄어들지 않은 i자리 수의 개수
 *   dp[i][0] + dp[i][1] + ... + dp[i][9]
 *   + 이는, dp[i+1][0] 과 같다
 *     # '0' + 줄어들지 않는 i자리 수 = 줄어들지 않는 (i+1)자리 수
 */

# Code

//
//  BOJ
//  ver.C++
//
//  Created by GGlifer
//
//  Open Source

#include <iostream>
#include <cstring>

using namespace std;

#define endl '\n'

// Set up : Global Variables
/* None */

// Set up : Functions Declaration
/* None */


int main()
{
    // Set up : I/O
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // Process
    long dp[65+1][9+1]; /* dp[i][j] = j로 시작하는 줄어들지 않은 i자리 수 */
    /* 초기화 */
    memset(dp, 0, sizeof(dp));
    for (int i=0; i<=9; i++) {
        dp[1][i] = 1;
    }
    /* DP */
    for (int i=2; i<=65; i++) {
        for (int j=0; j<=9; j++) {
            for (int k=j; k<=9; k++) {
                dp[i][j] += dp[i-1][k];
            }
        }
    }

    // Set up : Input
    int T; cin >> T;

    while (T--) {
        int N; cin >> N;

        // Control : Output
        /* dp[N][0] + dp[N][1] + ... + dp[N][9] = dp[N+1][0] */
        cout << dp[N+1][0] << endl;
    }
}

// Helper Functions
/* None */
profile
이런 미친 게임을 봤나! - 옥냥이

0개의 댓글