- 動的計画法
- 以下の三つのパターンを考えれば良い
- 一つ前から縦のタイルを置くパターン
- 二つ前から横のタイル二つを置くパターン
- 二つ前から正方形のタイルを置くパターン
- 組み合わせの数が膨大になるため多倍長整数が必要となる
- nが64ビットまでかつmod何とかで答えよという場合は行列のn乗が必要となる
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
private void run() {
final BigInteger[] dp = new BigInteger[256];
dp[0] = BigInteger.ONE;
dp[1] = BigInteger.ONE;
for (int i = 2; i <= 250; ++i) {
dp[i] = dp[i - 2].multiply(BigInteger.valueOf(2)).add(dp[i - 1]);
}
final Scanner scanner = new Scanner(System.in);
while (scanner.hasNextInt()) {
final int n = scanner.nextInt();
System.out.println(dp[n].toString());
}
}
public static void main(String[] args) {
new Main().run();
}
}