有一个有着n个柱子的围墙,每个柱子可以涂上k种颜色之一。你需要将所有柱子都涂上颜色,以使得相邻的柱子最多只有两个颜色相同。返回您可以涂色的围栏的总方案数。
diff - 不同颜色的组合数,
same - 相同颜色的组合数,
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);
最终的公式是:
diff[i] = (diff[i - 1] + diff[i - 2]) * (k - 1);
same[i] = diff[i - 1];
我知道如何找到same[i]
,但是我不明白如何找到diff[i]
。你能解释一下diff[i]
的公式吗?