[C++]BOJ 11057 - 오르막 수

[C++]BOJ 11057 - 오르막 수

각 자리수 별로 0 ~ 9까지 숫자들의 등장 가능한 빈도를 세면 된다.
dp로 풀 수 있고 바로 전 자리수에 자신보다 작거나 같은 수가 얼마나 있는지를 dp[i][j]에 저장해나가면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int n, ans, dp[1001][11];
int main() {
cin >> n;
for(int i = 0; i < 10; i++)
dp[1][i] = 1;
for(int i = 2; i <= n; i++)
for(int j = 0; j < 10; j++)
for(int k = j; k < 10; k++) {
dp[i][j] += dp[i - 1][k];
dp[i][j] %= 10007;
}
for(int i = 0; i < 10; i++)
ans += dp[n][i];
cout << ans % 10007;
}