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. 好子集的数目(状态压缩动态规划)

LeetCode 838 推多米诺[模拟] HERODING的LeetCode之路

leetcode中等838推多米诺

[leetcode] 推多米诺 双指针