これは、問題を解決しているときに私が日常的に間違えるものです。引数が最下位にある場合、再帰関数の値をどのように決定するのでしょうか。例が役立ちます:
n を指定して、2x1 ブロックのみを使用して 3xN グリッドをタイル化する方法の数を見つけます。ブロックの回転が許可されます。
DP ソリューションは、次のように簡単に見つけることができます。
f(n): 3xN グリッドをタイル化する方法の数
g(n): 3xN グリッドを、1x1 ブロックを右端の列で切り取って並べる方法の数
f(n) = f(n-2) + 2*g(n-1)
g(n) = f(n-1) + g(n-2)
私は当初、基本ケースは f(0)=0、g(0)=0、f(1)=0、g(1)=1 になると考えていました。しかし、これは間違った答えをもたらします。次に、どこかで f(0)=1 を読み、次のように推論しました。
タイル (2x1 ブロック) を使用できない方法は 1 つしかないため、3x0 グリッドをタイル化する方法は 1 つです。
私の質問は、その論理により、g(0) も 1 であってはならないということです。しかし、正しい解では g(0)=0 です。一般に、何も使わない方法が 1 つあると言えるのはいつですか。