nのポストがあり、各ポストはkのいずれかの色で塗りつぶすことができます。あなたは、2つ以上の隣接するフェンスポストが同じ色を持たないように、すべてのポストをペイントする必要があります。フェンスをペイントする方法の総数を返します。ダイナミックプログラミング - ペイントフェンスアルゴリズム
差分 - 異なる色の組み合わせの数、
同じ - 同じ色の組み合わせの数、
N - 投稿の数、
K - 色の数。
についてN = 1:
diff = k;
same = 0;
についてN = 2:
diff = k * (k - 1);
same = k;
N = 3の場合:
diff = (k + k * (k - 1)) * (k - 1);
same = k * (k - 1);
、最終式は、
same[i] = diff[i - 1];
diff[i] = (diff[i - 1] + diff[i - 2]) * (k - 1);
same[i]
の検索方法はわかりましたが、diff[i]
の検索方法はわかりません。 diff[i]
の式を説明できますか?
2番目のdiff [i-1]はdiff [i-2] – user908645
でなければなりません。私はこの質問をインタビューで取りましたが、おそらくこの推論をします: 1)最後の2つの投稿が同じ色を持っているため、最後の2つの投稿を最後の3つと同じにすることはできません。 (k-1)* diff [n-2] 2)最後の2つの投稿の色が異なります。 (k-1)*(diff [n-2] + diff [n-1])を生成する(k-1)* diff [n-1] – user908645