LeetCode 790 多米诺和托米诺平铺[动态规划] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 790 多米诺和托米诺平铺[动态规划] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
很有意义的一道动态规划题目,和一般的动态规划题型不同,涉及到图形的变换,那么我们只从每一列开始看,假设遍历到当前一列,之前所有列都填充满了,后面的列都没填充,那么对于当前列,有如下四种填充方式:
即每一列有四种状态:
- 一个正方形都没有被覆盖,记为状态 0;
- 只有上方的正方形被覆盖,记为状态 1;
- 只有下方的正方形被覆盖,记为状态 2;
- 上下两个正方形都被覆盖,记为状态 3。
代码如下:
class Solution
private:
long long mod = 1000000007;
public:
int numTilings(int n)
vector<vector<long long>> dp(n + 1, vector<long long>(4, 0));
dp[0][3] = 1;
for(int i = 1; i <= n; i ++)
dp[i][0] = (dp[i - 1][3]) % mod;
dp[i][1] = (dp[i - 1][2] + dp[i - 1][0]) % mod;
dp[i][2] = (dp[i - 1][1] + dp[i -1][0]) % mod;
dp[i][3] = (dp[i - 1][0] + dp[i - 1][1] + dp[i - 1][2] + dp[i - 1][3]) % mod;
return dp[n][3];
;
以上是关于LeetCode 790 多米诺和托米诺平铺[动态规划] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
数据结构与算法之深入解析“多米诺和托米诺平铺”的求解思路与算法示例
LeetCode 717. 1 比特与 2 比特字符 / 838. 推多米诺 / 1994. 好子集的数目(状态压缩动态规划)