본문 바로가기

백준/DP

[ICPC] 백준 4811 - 알약

728x90
728x90

icpc.me/4811

 

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