LeetCode 790. 多米诺和托米诺平铺

news2025/7/18 8:41:09

LeetCode 790. 多米诺和托米诺平铺

  • 一、题目(经典动态规划)
  • 二、解题思路
    • 1. 铺满2*N面积:
    • 2. 对于第i列,有4种情况:
    • 3. N-1 -> N 转移方程:
  • 三、核心代码
  • 四、代码中存在的一些知识性问题
    • 1. 二层vector的定义、初始化
    • 2. mod
  • 五、代码的最终呈现

一、题目(经典动态规划)

两种形状的瓷砖(一种是12的,另一种是12+11的形状),拼2N面积,有多少种拼法(旋转图形算两种不同的,不算成同一种。)

二、解题思路

1. 铺满2*N面积:

翻译过来也即:

  1. 第N-1列及之前列全满;
  2. 第N列全满;
  3. 第N+1列及之后列全空。

2. 对于第i列,有4种情况:

  1. 一个正方形都没有被覆盖,记为状态 0;
  2. 只有上方的正方形被覆盖,记为状态 1;
  3. 只有下方的正方形被覆盖,记为状态 2;
  4. 上下两个正方形都被覆盖,记为状态 3。

例如本题最后第N列是满的,所以i=N的时候对应状态3。

3. N-1 -> N 转移方程:

在这里插入图片描述

三、核心代码

dp[0][3]=1;
for(int i = 1;i <= n; i++)
{
	dp[i][0] = dp[i-1][3];
	dp[i][1] = (dp[i-1][0]+dp[i-1][2]);
	dp[i][2] = (dp[i-1][0]+dp[i-1][1]);
	dp[i][3] = (dp[i-1][0]+dp[i-1][1]+dp[i-1][2]+dp[i-1][3]);
}
return dp[n][3];

四、代码中存在的一些知识性问题

1. 二层vector的定义、初始化

二层vector的定义:

  1. vector<vector<int>>(4);
  2. vector<vector<int>>vec; 最后每个元素值都是int类型(本题由于最后的值会很大,故使用long long: vector<vector<long long>>
  3. vector<vector<int>>vec(5);此处表明:外层是5个元素,也即: [[],[],[],[],[]],最后每个元素值都是int类型
  4. vector<vector<int>>vec(5,vector<int>(4));此处表明:外层是5个元素,内层是4个元素,且是vector<int>类型。此处为了同时定义内外层元素个数,采用了这种形式: vector<vector<long long>>dp(n+1,vector<long long>(4));(虽然不是很理解,但是也会用了)

vector大部分情况下会把值初始化为0:

  1. vector默认初始化,即不指定元素个数和值,此时vector的元素个数为0
  2. vector初始化指定元素个数,但不指定元素的值,此时元素的值默认初始化为0
  3. vector初始化指定元素的个数和值
  4. 通过rezise()函数重新调整二维vector的外层元素个数,则实际上内层vector的元素个数仍为0
  5. 通过rezise()函数重新调整二维vector的内外层元素个数,若为指定初始值,则默认初始化为0
    所以在本题中, vector<vector<long long>>dp(n+1,vector<long long>(4));这一句实际上已经把所有元素初始化成0了

2. mod

题目说返回对 10^9 + 7 取模 的值,但是标答在转移方程中就取模了。所有的转移都是采用的加法,所以在中间步骤取模也没事。

五、代码的最终呈现

class Solution {
public:
    int numTilings(int n) 
    {
        long long mod = 1e9 + 7;
        vector<vector<long long>>dp(n+1,vector<long long>(4));
        dp[0][3]=1;
        for(int i = 1;i <= n; i++)
        {
            dp[i][0] = dp[i-1][3];
            dp[i][1] = (dp[i-1][0]+dp[i-1][2])%mod;
            dp[i][2] = (dp[i-1][0]+dp[i-1][1])%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];
    }

这一题掺杂了个人的很多不恰当的理解orz

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

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

相关文章

浅谈JVM

内存结构&#xff1a; 程序计数器&#xff08;寄存器&#xff09; 作用&#xff1a;记住下一条jvm指令的执行地址 特点&#xff1a; 是线程私有的 不会出现内存溢出 虚拟机栈 虚拟机栈&#xff1a;是描述java方法执行的内存模型&#xff0c;每个方法在执行的同时都会创建…

生信初学者必知的镜像设置

文章目录Ubuntu镜像conda镜像R语言镜像Python镜像Julia镜像国内网络问题很烂&#xff0c;大家都知道&#xff0c;github、pubmed这些网站经常访问不了&#xff01;如果你平常会用到Ubuntu、conda、R语言、Python、Julia&#xff0c; 那你肯定为安转各种包、库、软件而烦恼过&am…

​草莓熊python turtle绘图代码(玫瑰花版)附源代码

​草莓熊python turtle绘图代码&#xff08;玫瑰花版&#xff09;附源代码 目录 一、前言 二、草莓熊手持玫瑰花成品效果图 三、代码演示方法和代码命令解释 四、草莓熊手持的玫瑰花源代码 五、相关资源图片 六、我的“草莓熊python turtle绘图&#xff08;玫瑰花版&…

Sparse编码和字典学习(1)基础知识和python简单实现

Sparse编码和字典学习1. 稀疏表示与字典学习简介1.1 Motivation1.2 字典学习的流程1.3 字典学习的数学模型2 python实现2.1字典学习2.1 稀疏性统计和误差计算参考资料和文献1. 稀疏表示与字典学习简介 1.1 Motivation 字典学习的思想应该源来实际生活中的字典的概念。字典是前…

谷粒商城 -- 项目环境搭建

注&#xff1a;以下的项目环境搭建过程&#xff0c;适用于所有的微服务项目的环境搭建&#xff0c;以后做微服务项目的时候看着这个笔记进行搭建环境即可 一、项目微服务划分图 二、Linux安装Docker 三、Docker安装mysql / redis 四、Vscode下载安装 五、谷粒项目结构创建&a…

碎片化学习Python的又一神作:termux

什么是Termux&#xff1f; 据Termux官网介绍&#xff0c;Termux是一个Android终端仿真器和Linux环境应用程序&#xff0c;运行于内部存储&#xff08;不在SD卡上&#xff09;&#xff0c;无需root或设置。 系统自动进行最小化安装&#xff0c;使用APT软件包管理器安装其它软件…

【成为红帽工程师】第三天 web服务器

目录 一、www简介 二、网址及http简介 三、www服务器的类型 四、www服务器的基本配置 五、相关实验 一、www简介 &#xff08;一&#xff09;什么是www www是world wide web的缩写&#xff0c;也就是全球信息广播的意思。通常说的上网就是使用www来查询 用户所需要的信息…

【十问十答】回归模型知识点

1. 线性回归的假设是什么 线性回归有四个假设&#xff1a; 线性&#xff1a;自变量&#xff08;x&#xff09;和因变量&#xff08;y&#xff09;之间应该存在线性关系&#xff0c;这意味着x值的变化也应该在相同方向上改变y值。 独立性&#xff1a;特征应该相互独立&#xf…

[附源码]java毕业设计大学生足球预约信息

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【Java基础】泛型+反射+枚举+Lambda表达式 知识点总结

【大家好&#xff0c;我是爱干饭的猿&#xff0c;本文重点介绍Java基础&#xff1a;泛型、反射、枚举、Lambda表达式知识点总结。 后续会继续分享其他重要知识点总结&#xff0c;如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下吧】 上一篇文章&#x…

Redis安装与配置 LInux Centos

1.介绍Redis Redis 是完全开源免费的&#xff0c;遵守BSD协议&#xff0c;内存中的数据结构存储系统&#xff0c;它可以用作数据库、缓存和消息中间件。 特点&#xff1a; 支持数据的持久化&#xff0c;可以将内存中的数据保存到硬盘&#xff0c;在重启后再次加载使用。 支持…

Navigation 组件使用入门

Navigation 组件使用入门https://developer.android.google.cn/guide/navigation/navigation-getting-started 添加依赖 dependencies {def nav_version "2.5.2"implementation "androidx.navigation:navigation-fragment:$nav_version"} 创建导航图 …

LeetCode 752. 打开转盘锁

今天在看bfs模板的时候看到了一个题目&#xff0c;解密码锁的这道题&#xff0c;半天也没啥思路和行动力&#xff0c;看了人家的java版的注释&#xff0c;花了40分钟才搞懂这个题&#xff0c;也真的是菜。写完之后发现这个题目还可以去优化&#xff0c;用双向bfs去解决&#xf…

Android App开发超实用实例 | 约束布局

从多个角度介绍约束布局设计中的控件定位。 01、约束布局基础 从 Android Studio 2.3版本起&#xff0c;约束布局是Android Studio布局文件的默认布局。其他布局方式在实现复杂一些的布局设计时存在多种或多个布局嵌套的情况&#xff0c;设备调用这样的布局文件就需要花费更多…

(未整理完)十月每日一题打卡

每日打卡 10.1 [重新格式化电话号码 lc1694](1694. 重新格式化电话号码 - 力扣&#xff08;LeetCode&#xff09;) 模拟题&#xff1a;特殊情况就是在最后划分完全部三个之后&#xff0c;还剩四个需要变成aa-bb class Solution { public:string reformatNumber(string number…

Redis系列:Redis主从、哨兵、集群介绍

本篇内容包括&#xff1a;Redis 主从架构、Redis 哨兵架构、Redis 集群架构 的介绍等内容&#xff5e; 文章目录一、Redis 主从架构1、Redis 主从架构2、主从架构原理二、Redis 哨兵模式1、Redis 哨兵模式2、Redis 哨兵模式工作过程三、Redis 集群模式1、Redis 集群模式2、Redi…

【树莓派不吃灰】基础篇⑲ 搭建usb摄像头MJPG-streamer图片流监控,支持远程视频监控访问

目录1. 前言2. 识别摄像头3. MJPG-streamer方案3.1 什么是 MJPG&#xff1f;3.2 MJPG 的优点&#xff1f;3.2 MJPG 的缺点&#xff1f;4. 搭建usb摄像头监控4.1 开启树莓派摄像头开关4.2 查看设备文件4.3 安装必要的库4.4 下载 mjpg-streamer 安装文件4.5 切换到 /mjpg-streame…

基于51单片机的温度甲烷监测报警串口上报proteus仿真原理图PCB

功能介绍&#xff1a; 0.本系统采用STC89C52作为单片机 1.LCD1602液晶实时显示当前温度和甲烷浓度 2.超过甲烷浓度阈值&#xff0c;蜂鸣器报警 3.按键可更改甲烷浓度阈值上限和启动/暂停检测 4.020%浓度&#xff0c;绿色LED点亮 20%~阈值上限&#xff0c;黄色LED点亮&#xff0…

C#操作modbus

modbus使用范围广泛&#xff0c;广泛应用于各类仪表&#xff0c;PLC等。 modbus的好处是免费&#xff0c;属于应用层协议&#xff0c;底层硬件基于485/以太网。 modbus协议本质还是自定义协议。 modbus调试软件&#xff1a; mthings: modbuspoll: 主站/从站&#xff0c;客…

前端静态页面基本开发思路(一)

有不少刚入门前端的同学经常问我前端布局的问题&#xff0c;总是跟我说在面对学校布置的作业或者想自己搭建博客的时候不知道怎么下手&#xff0c;不知道怎么去写静态的页面&#xff0c;每当我解决了一个又一个同学的问题的时候&#xff0c;又有新的同学来问&#xff0c;故思来…