알고리즘

백준 13699번 점화식 (JAVA)

박카스마시며코딩 2023. 10. 6. 22:27

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

 

저는 dp를 이용해 문제를 해결하였습니다.

점화식을 코드로 작성하고, 점화식대로 계산을 한다면 중복되는 계산이 있기에 DP를 이용해 2번 계산하지 않도록 하였습니다.

 

package BOJ.dp;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BOJ_13699 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long[] dp = new long[n+1];
        dp[0] = 1;
        long result = cal(n,dp);
        System.out.println(result);
    }
    private static final long NOT_VALID = 0;
    private static long cal(int n, long[] dp) {
        if(dp[n] != NOT_VALID){
            return dp[n];
        }
        long temp = 0;
        for(int i = 0 ; i < n ; i++){
            temp += cal(i,dp) * cal(n-i-1,dp);
        }
        return dp[n] = temp;
    }
}