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转移到kw[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++代码
|
|