p1368[扑街]广场铺砖

描述 Description
有一个W行H列的街道,需要用1*2小砖铺盖,小砖之间互相不能重叠,问有多少种不同的铺法?

输入格式 Input Format
只有一行2个整数,分别为W和H,(1<=W,H<=11)

输出格式 Output Format
只有1个整数,为所有的铺法数。

样例输入 Sample Input
2 4

样例输出 Sample Output
5

时间限制 Time Limitation
1s

注释 Hint
样例解释

来源 Source
poj 2411

    状态压缩的例题详细题解看代码吧:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#define intl long long//记住用long long不用long long只有50分别问我怎么知道的
using namespace std;
intl w,h,all;
intl f[13][1<<13];
void dfs(intl i,intl s,intl s1,intl s2,intl j)//在第i行第j,第i行的初始状态
//为s,当前状态为s1,i+1行状态为s2
{
    if(s1==all)//如果第i行已经铺完
    {
        f[i+1][s2]+=f[i][s];
        return ;
    }
    if(!(s1&(1<<j)))//如果第j位为零,就是讲1左移j位与s1进行运算,看结果是否为零
    {
        dfs(i,s,s1|1<<j,s2|1<<j,j+1);//竖着放一块,将这一行和下一行的第j位变为1
        //s1|1<<j就是将1左移j位与s1进行或运算
        if(j<w-1&&(!(s1&(1<<j+1))))//如果这一行还剩下多余连个空格则可横着放
            //如果在j+1位也为零则在这横放一个,继续搜索第j+2位
            dfs(i,s,s1|(1<<j)|(1<<(j+1)),s2,j+2);
        //s1|(1<<j)|(1<<j+1)相信大家都知道了吧,先把第j为变为一在把j+1位变为一
    }
    else//如果第j为不为零
        dfs(i,s,s1,s2&~(1<<j),j+1);//则下一层的状态s2的第j个位置也不为零
}
int main()
{
    cin>>w>>h;
    all=(1<<w)-1;
    if(w*h&1)
    {
        cout<<0<<endl;
        return 0;
    }
    f[1][0]=1;
    for(int i=1;i<=h;i++)
        for(int j=0;j<=all;j++)
            dfs(i,j,j,0,0);
    cout<<f[h+1][0]<<endl;
    return 0;
}
//本文中用到的基本位运算可以参考我的模板博客
//http://www.cnblogs.com/lcyhaha/p/7413455.html
//在第25下面的第二个补充专栏简单的写有本文中用到的位运算
时间: 2024-09-05 08:42:13

p1368[扑街]广场铺砖的相关文章

广场铺砖问题(状压dp)

无传送门: 题目: 有一个 W 行 H 列的广场,需要用 1*2小砖铺盖,小砖之间互相不能重叠,问 有多少种不同的铺法? 输入数据: 只有一行 2个整数,分别为 W 和 H,(1<=W,H<=11) 输出数据: 只有 1个整数,为所有的铺法数. 样例: Floor.in 2 4 Floor.out 5 广场铺砖问题(状压dp),布布扣,bubuko.com

铺砖问题 (状态压缩DP)

题意: 给定n*m的格子,每个格子被染成了黑色或者白色.现在要用1 * 2 的砖块覆盖这些格子,要求块与块之间互相不重叠,且覆盖了所有白色的格子,但不覆盖任意一个黑色格子.求一个有多少种覆盖方法,输出方案数对M取余后的结果. 输入: n= 3 m= 4 每个格子的颜色如下所示(.表示白色,x表示黑色) - .x. - 输出: 2 分析: 由于黑色的格子不能被覆盖,因此used里对应的位置总是false.对于白色的格子,如果现在要在(i,j)位置上放置砖块,那么由于总是从最上方的可放的格子开始放置

[ACM] HDU 1400 Mondriaan&#39;s Dream (状态压缩,长2宽1长方形铺满)

Mondriaan's Dream Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 783    Accepted Submission(s): 506 Problem Description Squares and rectangles fascinated the famous Dutch painter Piet Mondri

[ACM] HDU 1400 Mondriaan&amp;#39;s Dream (状态压缩,长2宽1长方形铺满)

Mondriaan's Dream Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 783    Accepted Submission(s): 506 Problem Description Squares and rectangles fascinated the famous Dutch painter Piet Mondri

西安装修公司做毛坯房的装修费用

西安毛坯房装修要多少钱呢?买房之后的另一项花费就是装修了,稍不注意就会出现被坑的局面,尤其是在高消费的大西安.今天,云麦装饰(www.iyunmaizs.com)就来跟您说说西安装修公司做毛坯房的装修费用. 项目名称单位单价(元)工艺做法及材料说明,平米65     1.清理墙面,批刮环保腻子,三遍涂刷.墙漆为三色以上另加3元/平米或每房间加150元     2.铲墙皮另记每平米3元.     3.基层处理,批灰另记.     4.门窗洞口减半计算如包门窗套则全部扣除洞口面积.     5.不包

随记:我们需要怎样的数学教育?

随记:我们需要怎样的数学教育? 注:这篇文章里有很多个人观点,带有极强的主观色彩.其中一些思想不见得是正确的,有一些话也是我没有资格说的.我只是想和大家分享一下自己的一些想法.大家记得保留自己的见解.也请大家转载时保留这段话. 我不是一个数学家.我甚至连数学专业的人都不是.我是一个纯粹打酱油的数学爱好者,只是比一般的爱好者更加执着,更加疯狂罢了.初中.高中一路保送,大学不在数学专业,这让我可以不以考试为目的地学习自己感兴趣的数学知识,让我对数学有如此浓厚的兴趣.从 05 年建立这个 Blog 以

西安曲江别墅半包装修价格

据云麦小编所知,很多业主对装修公司的报价单都不是很明白,都是装修公司一直在讲,多少就是多少,整个家庭装修下来就花费比预算高了不少,这里就有装修公司的猫腻,那么在装修过程中如何避免装修公司猫腻呢?云麦装饰(www.iyunmaizs.com)在这里分享西安装修半包价格详细解析. 首先我们先看看装修半包的基本定义: 半包:自己买主材 半包是介于清包和全包之间的一种方式,主材由业主自行采购,装修公司提供施工服务和包辅料的供应,这两件事是非专业人士最难做好的.半包相对于清包来说比较省事,业主可能通过自己

热点问题f

项目包括欢乐雪域.欢乐水寨.欢乐海洋.欢乐天街和华谊兄弟电影小镇等核心项目为一体的欢乐王国,通过多种游憩项目给游客带来不同的旅游体验. 7.活动10万份单页.1万份海报.200个易拉宝为"协办单位"呈现. 湖南省食品药品监督管理局副局长李赤群肯定了长沙市在食品药品监管和创建国家食品安全示范城市中做出的工作,他要求,各级政府要认真抓好"从农田到餐桌"的每一道防线,突出"三小"整治,加大对制假售假.制售有毒有害食品.非法添加等行为的打击力度.监管人员

:校园欺凌情况已oh

红网长沙2月23日讯(时刻新闻记者 易征洋 通讯员 杨艳)来自宁乡的李涛(化名)今年30岁,正直而立之年,却深受病痛折磨."半个月前入院时,患者缺氧严重,呼吸困难,全身水肿,意识都不清楚了,是用轮椅推着进来的"2月23日,湖南省胸科医院内三科主任梁珍介绍. 这次公布的8起案件案情简要如下: 在精准扶贫工作中,江西省永丰县水利.农业.林业等部门帮扶贫困农民发展水土保持林果业,既绿化了荒山美化了环境,又实现绿色生态致富.(刘浩军摄/光明图片) 扎实推进精准扶贫.精准脱贫,要强化脱贫举措.抓