BOJ 11726-2 x nタイル


次のリンクのマニュアルに従って質問に答えています.
アルゴリズムガイド
質問する
11726-2 x nタイル
質問する
2×nサイズ1の矩形×2, 2×タイルで充填する方法の数を求めるプログラムを作成してください.
下図2×5長方形を充填する方法の一例.

入力
最初の行はnです.(1 ≤ n ≤ 1,000)
しゅつりょく
1行目2×n矩形を充填する方法数を10007で割った後、残りを出力する.
1時間で答えが思いつかなかったので、解説を探してみました.
しかし納得できないので、理解するまで考えて文章を書くことにしました.
まず入学試験?解食の仕方が目立ち、nが1の場合、1、nが2の場合、2、nが3の場合、3、nが4の場合、5...そして書いたらうん?フィボナッチだったのか!そして、a[n]=a[n−1]+a[n−2]と考えられる.
このようにするのは学習の趣旨と合わないので、もう一度考えてみることにした.
このような悩みの中で、あまりにも簡単に解決して、半空半喜の気持ちで書いています.

すなわち、ans[n−2]において、2つのスペースを埋めることができる場合は=,‖であるが、=のうち1つのみであり、ans[n−2]*1とans[n−2]の[n−2]は同じであり、ans[n−2]を||で埋める場合は、ans[n−1]である.
ans[n-3]を考慮すべきだと思いますので、ちょっと迷っていますが、これはとても簡単な問題です.
以下のコード添付ファイル.
N = int(input())
ans = [0 for _ in range(1001)]
ans[1] = 1
ans[2] = 2
for i in range(3, N + 1):
    ans[i] = ans[i - 1] + ans[i - 2]
print(ans[N] % 10007)
類似問題11727
  • 今回は2×2正方形でも使える条件の問題しか出てこなかった.
  • 違いはありません.
  • よく考えてみると
  • ans[n-2]は、そこでしか入れない=の11726とは違って、Xを入れることができます.
  • 1726の点火式がa[n]=a[n-1]+a[n-2であれば、今回は
    a[n]=a[n-1]+2*a[n-2]とは異なります.