본문 바로가기

백준/DP

백준 2688 - 줄어들지 않아

728x90
728x90

www.acmicpc.net/problem/2688

 

2688번: 줄어들지 않아

문제 어떤 숫자가 줄어들지 않는다는 것은 그 숫자의 각 자리 수보다 그 왼쪽 자리 수가 작거나 같을 때 이다. 예를 들어, 1234는 줄어들지 않는다.  줄어들지 않는 4자리 수를 예를 들어 보면 0011,

www.acmicpc.net

 

각 자리의 숫자들이 단조 증가하는 수열을 구하는 문제이다.

1의 자리 숫자들은 문제에서 이야기하는 줄어들지 않음을 만족하므로 그 갯수를 1로 채우고 바텀업 DP를 통해 나머지 자리수들의 값을 채워나가면 된다.

 

#include <bits/stdc++.h>

using namespace std;
using ll = long long;

ll dp[10][64];

int main()
{   
    for (int a = 0; a < 10; ++a)
        dp[a][0] = 1;
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    
    for (int i = 1; i < 64; ++i)
        for (int j = 0; j < 10; ++j)
            for (int k = j; k >= 0; --k)
                dp[j][i] += dp[k][i - 1];
    
    int t; cin >> t;
    
    while (t--)
    {
        ll res = 0;
        int digit;
        cin >> digit;
        
        for (int j = 0; j < 10; ++j)
            res += dp[j][digit - 1];
        cout << res << '\n';
    }
}

 

728x90
728x90

'백준 > DP' 카테고리의 다른 글

백준 2056 - 작업  (0) 2020.07.11
백준 1915 - 가장 큰 정사각형  (0) 2020.06.22
백준 2624 - 동전 바꿔주기  (0) 2020.05.19
백준 3980 - 선발 명단  (0) 2020.05.18
백준 15468 - 퇴사 2  (0) 2020.05.13