알고리즘
백준 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;
}
}