https://www.acmicpc.net/problem/2133
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class Main {
public int getCaseNum(int n) {
if(n % 2 == 1) {
return 0;
}
int[] dp = new int[n + 1];
dp[0] = 1;
dp[2] = 3;
for(int i = 4; i <= n; i += 2) {
dp[i] = dp[i - 2] * dp[2];
for(int j = i - 4; j >= 0; j -= 2) {
dp[i] += dp[j] * 2;
}
}
return dp[n];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
br.close();
Main m = new Main();
bw.write(m.getCaseNum(n) + "\n");
bw.flush();
bw.close();
}
}
즉, N이 2일 때 3가지 경우의 수를 가졌으므로 N이 4일 때는 3 * 3 = 9가지의 경우의 수를 가집니다.
그런데, N이 2인 경우를 두 번 합한 것으로는 만들 수 없는 경우의 수가 아래와 같이 존재합니다.
위 그림처럼 추가적인 경우의 수가 2가지 더 존재하기 때문에 N이 4일 때의 경우의 수는 11가지가 됩니다.
즉, N이 2인 경우를 세 번 합한 것이므로 이 때는 3 3 3 = 27가지의 경우의 수를 가집니다.
N이 4인 경우와 N이 2인 경우를 합칠 때는, 2인 경우가 왼쪽에 있는 경우와 오른쪽에 있는 경우가 있기 때문에 2인 경우와 4인 경우를 합친 11 * 3 = 33가지의 경우가 2번 나타나므로 66가지가 됩니다.
그런데, N이 4인 경우와 N이 2인 경우를 합치는 경우를 생각해보면 N이 2인 경우를 세 번 합한 것들을 포함하고 있습니다.
N이 4인 경우와 N이 2인 경우를 합치는 경우에서 N이 2인 경우를 세 번 합한 경우에 포함되지 않는 경우는 N이 4인 경우에 생기는 예외 케이스 2가지와 관련된 경우입니다.
그렇기 때문에 N이 4인 경우와 N이 2인 경우를 합치는 2가지 경우 중 한 가지에 대해서 우선 경우의 수를 구한 후에 예외 케이스 2가지에 대해서만 N이 2인 경우와 합쳐주면 N이 6일 때의 경우의 수가 나오게 됩니다.
그런데 N이 6인 경우에도 아래와 같이 2개의 예외 케이스가 존재합니다.
그렇기 때문에 N이 6인 경우의 경우의 수는 아래와 같습니다.