728x90
728x90
N이 주어질 때 서로 다른 문자열의 개수를 $D_N$이라고 한다면 $D_1 = 1, D_2 = 2, D_3 = 5, D_4 = 14$ 가 예제 TC에 주어지고 이는 카탈란 수임을 알 수 있다.
N이 작으므로 카탈란 수의 점화식 $C_N = \Sigma_{i = 0}^{N - 1}C_iC_{N - 1 - i}$을 이용해 동적계획법을 수행한 후 각 쿼리에 알맞은 값을 출력하면 된다.
전체 코드
더보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
#include <iostream>
using namespace std;
using ll = long long;
ll dp[31];
int main()
{
cin.tie(0); ios::sync_with_stdio(false);
dp[0] = dp[1] = 1, dp[2] = 2, dp[3] = 5, dp[4] = 14;
for (int i = 5; i <= 30; ++i)
for (int j = 0; j < i; ++j)
dp[i] += dp[j] * dp[i - j - 1];
int n;
cin >> n;
while (n)
{
cout << dp[n] << '\n';
cin >> n;
}
}
|
cs |
728x90
728x90
'백준 > DP' 카테고리의 다른 글
[ICPC] 백준 2159 - 케익 배달 (0) | 2020.12.01 |
---|---|
백준 11051 - 이항 계수 2 (0) | 2020.11.30 |
백준 2248 - 이진수 찾기 (0) | 2020.11.21 |
백준 1328 - 고층 빌딩 (0) | 2020.11.15 |
[KOI] 백준 1983 - 숫자 박스 (0) | 2020.11.15 |