790. Domino and Tromino Tiling

文章目录

  • 1 题目理解
  • 2 动态规划
    • 2.1只有一种板
    • 2.2 有两种板

1 题目理解

We have two types of tiles: a 2x1 domino shape, and an “L” tromino shape. These shapes may be rotated.

XX <- domino

XX <- “L” tromino
X
Given N, how many ways are there to tile a 2 x N board? Return your answer modulo 10^9 + 7.

(In a tiling, every square must be covered by a tile. Two tilings are different if and only if there are two 4-directionally adjacent cells on the board such that exactly one of the tilings has both squares occupied by a tile.)

Example:
Input: 3
Output: 5
Explanation:
The five different ways are listed below, different letters indicates different tiles:
XYZ XXZ XYY XXY XYY
XYZ YYZ XZZ XYY XXY
Note:

N will be in range [1, 1000].

输入:正整数N
输出:能够组成2xN 的一个长方形,有几种方式。
规则:积木类型有两种:一种是XX,domino板;一种是
XX
X
tromino板。返回的结果应该是对109+710^9 + 7109+7取余。
这个题目,从题目理解就很费解。还是看了花花酱的解释才明白怎么回事。一种积木是长方形,一种积木是L行。每次是在前一个状态上,追加这两种板的其中一种或者两种。最终拼成一个2xn的长方形。

2 动态规划

2.1只有一种板

如果只有一种domino板,有多少种方式铺满一个2xn的长方形呢?
在这里插入图片描述
画图之后发现dp[i] = dp[i-1]+dp[i-2],是一个菲波那切数列。初始化:dp[0]=1,dp[1]=1。答案是:dp[n]。

2.2 有两种板

如果有两种版,domino板和tromino板。
在处理第i步的时候,对于前i-1形成的图像可能分成三种情况。
一种情况是前i-1步以后,第i-1列,上下两行都有板。
在这里插入图片描述

一种情况是前i-1步以后,第i-1列,上面一行有板。(看灰色部分)
在这里插入图片描述
一种情况是前i-1步以后,第i-1列,下面一行有板。(看灰色部分)
在这里插入图片描述

我们定义数组in[N+1][3] dp。dp[i][0]表示第i列,上下行都有板。dp[i][1]表示第i列,上面行有板。dp[i][2]表示第i列,下面行有板。

那么分析要到达dp[i][0]有哪些可能性,或者说从哪些状态能到达dp[i][0]。
在这里插入图片描述
如图所示,第一个需要一块domino板,第二个需要2块domino板,第3个需要一块tromino板,第4个需要一块tromino板。

所以递归方程为:dp[i][0] = dp[i-1][0] + dp[i-2][0] + dp[i-1][1] + dp[i-1][2]

接着分析要到达dp[i][1]有哪些可能性,或者说从哪些状态能到达dp[i][1]。
在这里插入图片描述

递归方程:dp[i][1] = dp[i-2][0] + dp[i-1][2]

最后分析要到达dp[i][2]有哪些可能性,或者说从哪些状态能到达dp[i][2]。
在这里插入图片描述
递归方程:dp[i][2] = dp[i-2][0] + dp[i-1][1]

编码解决

class Solution {public int numTilings(int N) {long[][] dp = new long[N+1][3];dp[0][0] = dp[1][0] = 1;int kMod = 1000000007;for(int i=2;i<=N;i++){dp[i][0] = (dp[i-1][0] + dp[i-2][0] + dp[i-1][1] + dp[i-1][2])%kMod;dp[i][1] = (dp[i-2][0] + dp[i-1][2])%kMod;dp[i][2] = (dp[i-2][0] + dp[i-1][1])%kMod;}return (int)dp[N][0];}
}

时间复杂度O(n)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百一十四期:盘点十大最新Web UI测试工具

本文为您盘点目前十大最新Web UI测试工具的各自优缺点&#xff0c;以方便您根据实际情况进行选择。 作者&#xff1a;陈峻 在过去的几年中&#xff0c;业界至少出现了十二种全新的UI测试自动化工具。虽然每一种工具都有各自的侧重点&#xff0c;但是它们普遍将出色的可用性和…

新起点

还记得以前找资料时经常看到博客园的文章&#xff0c;今天很高兴我也参与其中了。我只希望通过这么一个平台来不断的激励自己&#xff0c;属于我的大学时间已经不多了&#xff0c;不再懊悔过去&#xff0c;只要坚持从今天开始&#xff0c;一万小时定律我相信你。加油~ just now…

通过Web Services上传和下载图片文件

通过Web Services上传和下载图片文件 随着Internet技术的发展和跨平台需求的日益增加&#xff0c;Web Services的应用越来越广&#xff0c;我们不但需要通过Web Services传递字符串信息&#xff0c;而且需要传递二进制文件信息。下面&#xff0c;我就分别介绍如何通过Web Servi…

300. Longest Increasing Subsequence

文章目录1 题目理解2 动态规划3 二分贪心1 题目理解 Given an integer array nums, return the length of the longest strictly increasing subsequence. A subsequence is a sequence that can be derived from an array by deleting some or no elements without changing…

第一百一十五期:Web开发必须掌握的三个技术:Token、Cookie、Session

在Web应用中&#xff0c;HTTP请求是无状态的。即&#xff1a;用户第一次发起请求&#xff0c;与服务器建立连接并登录成功后&#xff0c;为了避免每次打开一个页面都需要登录一下&#xff0c;就出现了cookie&#xff0c;Session。 作者&#xff1a;一颗小梪梪 在Web应用中&am…

这个博客复活了

原来因为页面配置的问题出了一堆的bug,久而久之就不想管了。 但是经过了漫长的寻找博客的过程中&#xff0c;我还是回到了这里。 洛谷博客实在是有点太简陋了&#xff0c;\(hexo github\)上传太麻烦&#xff0c;要clean然后g,然后d。 之后我就重新弄了下界面&#xff0c; 现在…

第一百一十六期:不能错过!你必须知道的3种重要Python技能

学习Pandas是很棒的体验&#xff0c;学习Numpy也很有趣。但是&#xff0c;你是否过早地开始使用程序库了呢&#xff1f;这也许是因为你还没有意识到pure python的魅力。 作者&#xff1a;读芯术 学习Pandas是很棒的体验&#xff0c;学习Numpy也很有趣。但是&#xff0c;你是否…

Erlang消息传递-tut15.erl

作 w3cschool erlang 的练习 --------- 1 -module(tut15).2 3 -export([start/0, ping/2, pong/0]).4 5 %% Erlang 消息传递6 %% Erlang 进程之间的消息可以是任何简单的 Erlang 项. 比如说, 可以是列表、元组、整数、原子、进程标识等等7 %% recevie 关键字的语法: 请注意, 在…

673. Number of Longest Increasing Subsequence

文章目录1 题目理解2 动态规划1 题目理解 Given an integer array nums, return the number of longest increasing subsequences. Notice that the sequence has to be strictly increasing. 输入&#xff1a;整数数组int[] nums 输出&#xff1a;最长递增子序列的个数 规则&…

第一百一十七期:爱上 Go 语言的10个理由

这个月 Go 语言就将迎来它的10岁生日了&#xff0c;于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 作者&#xff1a;4bytes 这个月 Go 语言就将迎来它的10岁生日了&#xff0c;于是我们特地列出了10条让你可以开心使用 Go 语言的理由。 Map 集合/映射默认使用0值 …

Nhibernate.hbm2ddl.auto配置详解

hibernate.cfg.xml 中hibernate.hbm2ddl.auto配置节点如下&#xff1a; <properties><property name"hibernate.show_sql" value"true" /> <property name"hibernate.hbm2ddl.auto" value"create" /></prop…

1048. Longest String Chain

文章目录1题目理解2 动态规划1题目理解 输入&#xff1a;字符串数组words&#xff0c;字符串只包含小写字母 规则&#xff1a;对于word1和word2&#xff0c;如果在word1中任何一个位置添加一个字符能够得到word2&#xff0c;那么可以称word1为word2的前身。词链是单词 [word_1…

第一百一十八期:运行 JavaScript 代码片段的 20 种工具

运行 JavaScript 代码片段的 20 种工具 前端日常开发中&#xff0c;我们使用喜爱的 IDE 调试 JavaScript 代码&#xff0c;比如我喜欢的代码编辑器有两个&#xff0c;Sublime Text 3 和 VS Code&#xff0c;前几年还使用过 Atom&#xff0c;偶尔我们会遇到临时需要快速分享给同…

如何建立好的索引.--针对Distinct

SQL语句SELECT DISTINCT EDOWN,EDOPT FROM EMFLIB.EQEDIPF WHERE EDCHK1 AND EDCHK2M AND EDCHK3 AND EDCHK4 AND EDTAG2数据库记录总数 1518741条符合查询的记录数 657225条最早的索引 EDCHK1 EDCHK2 EDCHK3 EDCHK4 EDTAG2 EDERRCODE消耗的时间:1分钟左右为什么呢?主要的原因…

一年总结

从九月份开学到现在为止&#xff0c;将近一年的学习结束&#xff0c;做一下简要总结&#xff0c;记录一下这一年的收获。这将近一年的生活&#xff08;除去上课时间&#xff09;可以用几个单词概括。吃饭->实验室->例会&#xff08;每周一次&#xff09;->看代码->…

140. Word Break II

文章目录1 题目理解2 回溯记忆化1 题目理解 140与130的区别是&#xff0c;当字符串可分的时候&#xff0c;要求返回具体的分割字符串。 2 回溯记忆化 对于字符串s&#xff0c;如果前面一部分是单词列表中的词&#xff0c;则拆分出这个单词&#xff0c;右边的继续分割。 分割…

spring mvc学习(25):Eclipse设置代码自动提示

Eclipse只需几步简单的设置就可以像idea那样代码自动提示了&#xff0c;喜欢的小伙伴可以赶紧动手设置&#xff0c;提升效率。 第一步&#xff1a;打开Eclipse --> Window --> Preferences 第二步&#xff1a;点击Java --> 打开Editor --> 点击Content Assist 第…

打破牢笼,展望更高层次的世界

打破牢笼&#xff0c;展望更高层次的世界--------------------------------------------------------------笔者袁永福是一个十多年的老程序猿&#xff0c;一穷二白的出来创业多年&#xff0c;期间经历许多曲折和磨难&#xff0c;成功的在炮火连天的商业战场上活了下来&#xf…

spring mvc学习(26):处理数据模型--从表单到controller传输数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

第一课 回归问题与应用

本系列是七月算法机器学习课程笔记 文章目录1 不同类型的学习2 基本术语与概念3 线性回归模型3.1 什么是线性回归3.2 损失函数3.3 最小化损失函数-梯度下降3.4 学习率有什么影响3.5 过拟合与欠拟合4 逻辑回归4.1 为什么要有逻辑回归4.2 什么是逻辑回归4.3决策边界线性边界判定非…