骨牌覆盖问题

完美覆盖问题回溯法求解 问题描述用2×1或1×2的骨牌把m×n的棋盘完全覆盖是一个很容易解决的问题。那么,能不能把完全覆盖的种数求出来会不会很复杂呢?请给出所有各不相同覆盖方案。要求给定任意m行n列的棋盘,编写程序求出使用2×1或1×2的骨牌对棋盘进行完全覆盖有多少种不同的方法。解题思路采用回溯法从左上角至右下角依次扫描未放置骨牌的方格,根据方格的右方和下方是否已经放置了骨牌来判断放置骨牌的位置以达到求解的目的。以3x4棋盘为例 此时填满棋盘,计数+1并进行回溯 代码如下 代码运行结果其中————— 阅读详情

 骨牌覆盖问题,就是用  1x2 大小的骨牌,铺设一个给定大小的一个矩形区域,要求必须铺满,且不可以超出边界。问总的铺设方案数位多少?

   这一类问题就是骨牌覆盖问题。


不同规模的数据有不同的方法。


  

   下面来看看最简单的   2×N  区域里面的铺设方法数。

N=0,一种;  N=1 为一种 ; N=2,两种;N=3,5种;

较为容易看出是斐波拉契数列;所以快速幂矩阵求斐波拉契数列;如果看不出来为什么是菲波拉契数的可以放一放,看看下面的3×n的方法之后,你就可以试着来证明2×N的为什么是这个数列。


   再来看看  3×N;我们可以来腿一下递推关系。我们可以假设我们已经放好 i 行的骨牌,即将要放 第 i+1 行的骨牌。则第 i 行的骨牌状态有


有这8中状态。 上一行的某一种状态能不能到这种状态,需要一个对应关系。用一个二维数组记录到这个状态的方案数。

       所以一开始用二维数组记录


数组行数代表在第几排,列数代表该一排的某一状态。一次一次递推下去便可以。

我们刚刚说了需要一个状态的对应关系,那个关系是上一个状态能否得到这个状态,我把这个关系用箭头表示,能到达的状态用箭头来指向它。

我们得到这幅对应关系,就是得到了递推关系。所以,我们可以根据这幅图构造一个矩阵。

便得到这个矩阵。



然后矩阵快速幂;

便可以求出答案;



分治法(棋盘覆盖问题) 有一个 2^kx2^k (k>0)的棋盘,恰好有一个方格与其他方格不同,称之为特殊方格。现在要用L形骨牌覆盖除了特殊方格以外的其他全部方格,骨牌可以任意旋转,并且任何两个骨牌不能重复。请给出一种覆盖方式 阅读详情

相关推荐

M * N 矩阵的骨牌覆盖问题

问题描述有一个 M * N的矩阵,现在需要使用 1 * 2 的骨牌进行覆盖,问总的覆盖方案数有多少? 题目链接:http://hihocoder.com/contest/hiho43/problem/1问题求解 标记骨牌覆盖状态 1, 横向排的骨牌表示: 1 1 2, 纵向排的骨牌表示: 0 1 骨牌状态转移 对于第 i 行与第 i+1 行,其中某段格子状态如下:

二十三小时 2633

骨牌覆盖

骨牌覆盖 题目描述 用大小为1×2的骨牌铺满一个大小为2×n的长方形方格,编写一个程序,输入n,输出铺放方案总数。例如,输入n=3,即大小为2×3的方格,输出3。3种骨牌铺放方案如下图所示: 输入 多组测试用例,每一组是一个正整数。 输出 每组输出占一行。 只需要输出铺放方案总数,不需要输出具体的铺放方案。 样例输入 3 样例输出 3 Code package Week3; import java.util.Scanner; //用大小为1×2的骨牌铺满一个大小为2×n的长方形方格,编写一个程序,输入n

qq_43461438的博客 1077

虚拟机安装Centos8.5

Centos8.5

weixin_63604047的博客 958

L型骨牌覆盖问题

概述 本文承接上文《求n个元素的全排序(从分治思想超详细解析)》,将再用一个详细的案例来带我们更深入的理解分治思想在解决实际问题中的体现。 同时,在后文我会把将前文的知识整合起来写成《算法分析与设计实验》的实验报告2–递归与分治策略应用基础,分享给大家。同为大学狗的可以借鉴一下????的微薄之作 L型骨牌覆盖问题 1.问题说明 在一个 2^k * 2^k 方格组成的棋盘中,若恰有一个方格与其他方格不...

JYplute的博客 4404

CMIP6数据处理及在气候变化、水文、生态等领域中的应用

CMIP6、Biome-BGC、生态、气候变化、气象、水文、气候模式、植被、生态模式、遥感、极端气候、降水、WRF模式、动力降尺度、RCM、大气环流模型、贝叶斯模型、、降尺度

PhyliciaFelicia的博客 1549

统信UOS开发环境支持Java

集成了JDK和多种IDE,为开发者提供了从代码编写、编译、调试到部署的一站式开发解决方案。

RZer的博客 2254

骨牌覆盖问题二

描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题? 所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢? 首先我们可以肯定,奇数长度一定是没有办法覆盖的;对于偶数长度,比如2,4,我们有下面几种覆盖方式: 提示:3xN骨牌覆盖 输入 第1行:1个整数N。表示棋盘长度。1≤N≤100,000,00

truejasonxiefans的专栏 1877

Python在Genesis2000 CAM软件中的编程应用

Genesis2000是一款功能强大的计算机辅助制造(CAM)软件,它提供了广泛的功能和工具,用于帮助制造商进行CAD(计算机辅助设计)到CAM的转换。在Genesis2000中,我们可以利用Python的灵活性和功能来扩展软件的自定义能力,并通过编写脚本来自动化各种制造任务。例如,假设我们需要在Genesis2000中添加一个新的操作,用于自动计算零部件的重量。我们可以编写一个Python脚本,通过遍历模型的几何数据并应用相关的计算公式,来实现这个功能。

PixelEnigma的博客 2423

[hihoCoder] 骨牌覆盖问题·二

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢?首先我们可以肯定,奇数长度一定是没有办法覆盖的;对于偶数长度,比如2,4,我们有下面几种覆盖方式:   提示:3xN骨...

weixin_34112181的博客 237

复制幻灯片到另一个PPT编程

请确保将源PPT文件和目标PPT文件的文件名修改为你实际使用的文件名。运行上述代码后,目标PPT将包含源PPT中的所有幻灯片和形状。这里假设源PPT文件名为"source.pptx",目标PPT文件名为"target.pptx"。方法将每个幻灯片的布局添加到目标PPT中。是一个强大的库,可以用于创建、修改和操作PPT文件。要将一个PPT中的幻灯片复制到另一个PPT,可以使用Python的。这段代码遍历源PPT的每个幻灯片,并使用。步骤 3: 打开源PPT和目标PPT。这将保存修改后的目标PPT文件。

ByteSparkX的博客 1322

uniapp(vue3)- 详解安装/使用pinia报错reportJSException >>>> exception function:createInstanceContext, excepti

uniapp vue3 pinia报错reportJSException >>>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> at useStore,H5网页,微信小程序,安卓App,苹果App,nvue,uniapp安装使用pinia出现报错at useStore,uniapp+vue3+ts 使用pinia报

🏆 前端领域优质创作者 4047

L型骨牌覆盖问题。

问题:解决一个2k*2k的特殊棋牌上的L型题。

m0_62645012的博客 2397

18、社区多能源管理与点对点能源交易优化调度策略研究

本文研究了社区多能源管理与点对点(P2P)能源交易的优化调度策略,构建了适用于单一社区多个产消者的P2P交易模型,以用户生产成本最小化为目标,设计了基于ADMM算法的迭代优化方法。通过电热联合调度与能源共享机制,结合光伏、热电联产(CHP)和储能系统(ESS),实现了用户侧能源的高效利用。仿真结果表明,引入P2P交易和CHP设备显著降低了用户能源成本,提高了电力自给率和天然气利用率,减少了对主电网的依赖。研究验证了ADMM算法在分布式优化中的有效性,为未来社区能源系统的智能化管理提供了理论支持和技术路径。

git9versioner的博客 70

[hihoCoder] 骨牌覆盖问题·一

时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢?举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:   提示:骨牌覆盖 提示:如何快速计算结果 输入 第1行:1个整...

weixin_34273481的博客 150

Unity中的Timeline

Timeline与动画系统类似,但是它可以针对多个物体做出一系列多个动画,它可以创建多个轨道,对象激活与隐藏轨道,动画轨道,声音轨道等。每个轨道都可以单独编辑,轨道内的不同资源可以排列并且融合

L的博客 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

hihocoder骨牌覆盖问题·三

#1162 : 骨牌覆盖问题·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 前两周里,我们讲解了2xN,3xN骨牌覆盖的问题,并且引入了两种不同的递推方法。 这一次我们再加强一次题目,对于给定的K和N,我们需要去求KxN棋盘的覆盖方案数。 提示:KxN骨牌覆盖 输入 第1行:2个整数N。表示棋盘宽

Programing_Excalibur的博客 972

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

hihoCoder #1143 : 骨牌覆盖问题·一

【题目链接】:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具。今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘。对于这个棋盘,一共有多少种不同的覆盖方法呢? 举个例子,对于长度为1到3的棋盘,我们有下面几种覆盖方式:

herongwei 的 BLOG 2840

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

2015编程之美 骨牌覆盖问题·二 (快速幂)

描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题? 所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢? 首先我们可以肯定,奇数长度一定是没有办法覆盖的;对于偶数长度,比如2,4,我们有下面几种覆盖方式: 提示:3xN骨牌覆盖 输入 第1行:1个整数N。表示棋盘长度。1≤N≤100,000,00

Misdom_Tian_Ya的专栏 966

分治算法;骨牌覆盖棋盘问题;

#include using namespace std;class ChessBoard{private: int board[50][50];//记录骨牌序号 int dr;//初始棋盘暗格横坐标 int dc;//初始棋盘暗格纵坐标 int size;//初始化棋盘长度 int count;public: //构造函数,初始化棋盘 Ches

总是在想,如果我能坚持2年,会是怎样? 1723

poj 2411 骨牌覆盖问题 状压dp

题目:点击打开链接 题意:用1*2 的矩形通过组合拼成大矩形,求拼成指定的大矩形有几种拼法 分析: 这题的关键在于什么状态是合法的,可以这样想,用1表示有骨牌覆盖,用0表示空着。在覆盖第i行的时候,那么如果覆盖的状态是合法的,覆盖完后第i-1行必须没有空格了(全是1111),所以可以看出,每一行的状态必须要有偶数个1相连,为什么? 由于在做第i行dp时必须完全覆盖第i-1行,只

01的世界 1963
上一篇: 省赛总结...
下一篇: 骨牌覆盖问题 KxM
Code--Dream
博客等级 码龄11年 53粉丝 100原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值