题目链接:POJ-2663
设有形状一样的多米诺牌,每张牌恰好覆盖棋盘上相邻的两个方格,即一张多米诺牌是一张 1 行 2 列或者 2 行 1 列的牌。那么,是否能够把 32 张多米诺牌摆放到棋盘上,使得任何两张多米诺牌均不重叠,每张多米诺牌覆盖两个方格,并且棋盘上所有的方格都被覆盖住?我们把这样一种排列称为棋盘被多米诺牌完美覆盖。这是一个简单的排列问题,同学们能够很快构造出许多不同的完美覆盖。但是,计算不同的完美覆盖的总数就不是一件容易的事情了。不过,同学们 发挥自己的聪明才智,还是有可能做到的。

输入

一次输入可能包含多行,每一行分别给出不同的 n 值 ( 即 3 乘 n 棋盘的列数 )。当输入 -1 的时候结束。
n 的值最大不超过 30.
输出

针对每一行的 n 值,输出 3 乘 n 棋盘的不同的完美覆盖的总数。

思路:
设a[i]为N=i时的方法数.i为奇数的时候肯定为0.

如果i为偶数,a[i]可以看成a[i-2]加上两个单位组成的,此时多出来的2单位有3种方法…

也可以看成a[i-4]加上四个单位组成的,此时这四个单位一定是连在一起的,中间不能分割,所以只有两种放法.

同理,可看成a[i-6]加上六个单位组成的,此时这六个单位也连在一起,不能分割,只有两种放法…

直到所有的砖块都是连在一起的,中间不能分割,也只有两种放法.

所以
a[i]=3a[i-2]+2(a[i-4]+a[i-6]+…+a[0]) ①

a[i-2]=3a[i-4]+2(a[i-6]+…a[0]) ②

①-②,得a[i]=4*a[i-2]-a[i-4].
参考文章
POJ 2663 Tri Tiling(完美覆盖)

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include<vector>
using namespace std;int main()
{int i,n;long long int a[31];a[0]=1;a[2]=3;for(i=4;i<=30;i+=2){a[i]=4*a[i-2]-a[i-4];}vector<int> vec;while(scanf("%d",&n)&&n!=-1){if(n%2==1){vec.push_back(0);continue;}elsevec.push_back(a[n]);}for(int i=0;i<vec.size();i++){printf("%I64d\n",vec[i]);}return 0;
}

算法题目——多米诺骨牌问题(POJ-2663)相关推荐

  1. 算法练习题——多米诺骨牌问题

    时间限制:  2  S         内存限制:  128  MB 题目描述: 给定一个尺寸为m*n大小的矩形板,同样给出无限个的尺寸为2*1的多米诺骨牌,在满足不允许两个骨牌互相叠放且不允许超出矩 ...

  2. POJ 1135 Domino Effect(最短路 多米诺骨牌)

    题意 题目描述:  你知道多米诺骨牌除了用来玩多米诺骨牌游戏外,还有其他用途吗?多米诺骨牌游戏:取一 些多米诺骨牌,竖着排成连续的一行,两张骨牌之间只有很短的空隙.如果排列得很好,当你推 倒第 1张骨 ...

  3. 多米诺骨牌——变形版0,1背包问题

    多米诺骨牌--变形版0,1背包问题 1.题目描述 2.问题分析 3.算法源码 1.题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的上方块中点数之和记为S1,下方块中点数之和 ...

  4. 【每日一题】 1128. 等价多米诺骨牌对的数量

    [每日一题] 1128. 等价多米诺骨牌对的数量 避免每日太过咸鱼,一天搞定一道LeetCode算法题 一.题目描述 给你一个由一些多米诺骨牌组成的列表 dominoes. 如果其中某一张多米诺骨牌可 ...

  5. P1282 多米诺骨牌 (差值DP+背包)

    题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...

  6. P1282-多米诺骨牌【dp,背包】

    正题 评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=P1282 题目大意 n个多米诺骨牌,上下值不相同,可以交换一个多米诺上 ...

  7. 【动态规划】 多米诺骨牌 (ssl 1632/luogu 1282)

    多米诺骨牌多米诺骨牌多米诺骨牌 Description Input 输入文件的第一行是一个正整数n(1≤n≤1000),表示多米诺骨牌数.接下来的n行表示n个多米诺骨牌的点数.每行有两个用空格隔开的正 ...

  8. 【01背包】洛谷P1282多米诺骨牌

    题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+1+1+1=9, ...

  9. LeetCode 1128. 等价多米诺骨牌对的数量(哈希)

    1. 题目 给你一个由一些多米诺骨牌组成的列表 dominoes. 如果其中某一张多米诺骨牌可以通过旋转 0 度或 180 度得到另一张多米诺骨牌,我们就认为这两张牌是等价的. 形式上,dominoe ...

最新文章

  1. Py之dominate:python的dominate库的简介、安装、使用方法之详细攻略
  2. MyBatisPlus中进行通用CRUD全局策略配置
  3. spring boot security学习
  4. 节省大量教科书的三种潜在风险方法
  5. HDU 4417 Super Mario(莫队 + 树状数组 + 离散化)
  6. CVPR19 基于图卷积网络的多标签图像识别模型 论文笔记
  7. 在建工地扬尘在线监控系统推荐_配电室为何需要安装蓄电池在线监控系统?保定钰鑫电气...
  8. CentOS报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7arch=x86_64repo=osi...
  9. 【缓存】Redis入门
  10. 基于 CoreAudio 的音频编解码(一):音频解码
  11. Linux终端嵌套桌面里,linux下终端分屏使用的两种方法(screen和tmux)
  12. 520 丁磊向全国英语老师“表白”:再送有道词典笔
  13. JS把命令式语句转换为表达式
  14. 数据库减压--php+mysql+memcached模拟nosql
  15. ssr使用mysql数据库_MySQL数据库安装与配置详解
  16. 让cajviewer记住正在浏览的文献,下次启动时自动打开上次浏览的文献
  17. 六,华为交换路由做NAT五种方法
  18. 黄金实盘点评:价格不宜回调过深
  19. 如何知道计算机显卡内存,如何查看显卡显存_如何查看显卡显存占用
  20. WSL gcc -m32 readdir 出错: Value too large for defined data type

热门文章

  1. 想要学习设计模式,你得先会看类图,一张图读懂UML
  2. look look C#7
  3. .Net Core上用于代替System.Drawing的类库
  4. python 绘制分形树
  5. 【经典回放】多种语言系列数据结构算法:希尔排序
  6. 如果编程语言是女孩子
  7. linux之history和!命令联合使用
  8. Android之使用HandlerThread 以及如何退出总结
  9. (9)有一些人在学习编程的时候总以为代码是死板的
  10. c均值算法的设计与实现_如何使用C链表实现 LRU 算法