https://www.acmicpc.net/problem/1670
다이나믹 프로그래밍 문제
점화식은
f(n) = { f(n-2) * f(0) } + { f(n-4) * f(2) } + ... + { f(k - m) * f(m-2) } + ... + { f(0) * f(n-2) }다.
예를 들어서
f(4) = f(2) * f(0) + f(0) * f(2)
f(6) = f(4) * f(0) + f(2) * f(2) + f(0) * f(4)
이다.
그림을 보며 이해해보자 .
여섯명짜리 악수를 대표로 살펴보자
이렇게 세 가지 경우가 나올 수 있다.
8개 짜리도 해보면 재밌을듯...
import java.io.*;
import java.util.StringTokenizer;
public class boj1670 {
static long[] dp = new long[10010];
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N;
N = Integer.parseInt(st.nextToken());
dps(N);
bw.write(dp[N] + "\n");
bw.flush();
}
static void dps(int N) {
dp[0] = 1;
dp[2] = 1;
for(int i = 4; i <= N; i += 2){
long temporalSum = 0;
for(int j = i-2; j >= 0; j -=2){
temporalSum += ((dp[j] * dp[i - 2 -j]) % 987654321);
temporalSum %= 987654321;
}
dp[i] = temporalSum;
}
}
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 13334 철로(JAVA) (0) | 2020.10.12 |
---|---|
백준 1938 통나무 옮기기 (0) | 2020.10.08 |
백준 1219 오민식의 고민(Java) (0) | 2020.10.03 |
백준 9661 : 돌 게임 7 (0) | 2020.10.02 |
백준 1111 IQ Test(Java) (0) | 2020.10.01 |