790. 多米诺和托米诺平铺
分析
- 状态表示:
- 用
f[i][j]
表示覆盖2 * i
面板且第i列状态为j
的方法数。这里的状态j
表示第i
列的覆盖情况,具体含义如下:j = 0
:第i
列已完全覆盖j = 1
:第i
列的上方未覆盖,下方已覆盖j = 2
:第i
列的下方未覆盖,上方已覆盖j = 3
:第i
列完全未覆盖
- 用
- 状态转移:
- 从第
i-1
列的状态j
转移到第i
列的状态k
。需要考虑瓷砖的放置规则,以及状态变化的可行性 - 定义
w[j][k]
为从状态j
转移到状态k
的合法性:w[j][k] = 1
:表示可以从j
转移到k
w[j][k] = 0
:表示不可以从j
转移到k
- 从第
- 初始状态:
f[0][0] = 1
:初始时第0
列完全覆盖- 其他状态初始化为 0。
- 目标:
- 返回
f[n][0]
,即第n
列完全覆盖的方案数
- 返回
时间复杂度
外层遍历列数 n
,内层枚举状态 j
和 k
各为常数 4
,因此时间复杂度为 O(16n) = O(n)
空间复杂度
O(n)
C++代码
|
|