Doby's Lab

백준 13699번: 점화식 (C++) 본문

PS/BOJ

백준 13699번: 점화식 (C++)

도비(Doby) 2022. 5. 17. 23:25

https://www.acmicpc.net/problem/13699

 

13699번: 점화식

다음의 점화식에 의해 정의된 수열 t(n)을 생각하자: t(0)=1 t(n)=t(0)*t(n-1)+t(1)*t(n-2)+...+t(n-1)*t(0) 이 정의에 따르면, t(1)=t(0)*t(0)=1 t(2)=t(0)*t(1)+t(1)*t(0)=2 t(3)=t(0)*t(2)+t(1)*t(1)+t(2)*t(0)=5 ... 주어진 입력 0 ≤ n

www.acmicpc.net


Solved By: DP

 

Top-Down DP 방법을 사용했습니다. 재귀 호출로 선언하여 t(n) 값이 존재한다면 그대로 리턴하고, 존재하지 않는다면 t(n)을 구하여 리턴하는 방식으로 Memoization 기법이 상당히 드러나는 문제였습니다.

 

#include <iostream>
#define MAX 36
#define ll long long
using namespace std;

int n;
ll t[MAX];

ll sol(int p){
    if(t[p]) return t[p];
    else{
        ll temp = 0;
        for(int i = 0; i < p; i++){
            temp += (sol(i) * sol(p - 1 - i));
        }
        return t[p] = temp;
    }
}

int main(){
    cin >> n;
    
    t[0] = 1;
    cout << sol(n);
    return 0;
}
728x90

'PS > BOJ' 카테고리의 다른 글

백준 9344번: 도로 (C++)  (0) 2022.05.21
백준 14916번: 거스름돈 (C++)  (0) 2022.05.18
백준 9625번: BABBA (C++)  (0) 2022.05.17
백준 1585번: 경찰 (C++)  (0) 2022.05.16
백준 14950번: 정복자 (C++)  (0) 2022.05.08