http://172.20.6.3/Problem_Show.asp?id=1386

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

数组f的不往后延伸指的是没有对后面产生影响的时候的状态,此时这一列的砖可横可竖但是横着的砖只是从上一列延伸来的而不会延伸到下一列
我觉得复杂度有点扯但是竟然过了,迷。
代码
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=(<<)+;
int n,m;
long long f[][maxn]={};//不往下延伸的情况下填格子为t的方案数
void dfs(int k,int st,int z,int next1,int num){/*到第几列,转移到的状态, 转移到第几行的数,上一行竖着放的有没有占到这一格,上一个的状态*/
if(z>n){
if(!next1)f[k][st]+=f[k-][num];
return;
}int x=st%(<<z)/(<<(z-)),y=<<(z-);
if(next1){
if(x){dfs(k,st,z+,,num+y);}
return;
}
if(x) dfs(k,st,z+,,num),dfs(k,st,z+,,num+y);
else dfs(k,st,z+,,num+y);
}
int main(){
scanf("%d%d",&n,&m);
if((n&)&&(m&)){printf("%d\n",);return ;}
int ma=<<n;ma-=;
for(int i=;i<=ma;i++){
int t=,x=i;int next1=,ff=;
while(x){
if(x%t){
if(next1==) next1=;
else next1=;
}else if(next1){ff=;break;}
x/=t;
}if(!ff)f[][i]=;
}
for(int k=;k<=m;k++){
for(int i=;i<=ma;i++){
dfs(k,i,,,);
}
}
printf("%I64d",f[m][ma]);
return ;
}

JZYZOJ1386 扑街 状压dp的更多相关文章

  1. BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]

    1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3336  Solved: 1936[Submit][ ...

  2. nefu1109 游戏争霸赛(状压dp)

    题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...

  3. poj3311 TSP经典状压dp(Traveling Saleman Problem)

    题目链接:http://poj.org/problem?id=3311 题意:一个人到一些地方送披萨,要求找到一条路径能够遍历每一个城市后返回出发点,并且路径距离最短.最后输出最短距离即可.注意:每一 ...

  4. [NOIP2016]愤怒的小鸟 D2 T3 状压DP

    [NOIP2016]愤怒的小鸟 D2 T3 Description Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可 ...

  5. 【BZOJ2073】[POI2004]PRZ 状压DP

    [BZOJ2073][POI2004]PRZ Description 一只队伍在爬山时碰到了雪崩,他们在逃跑时遇到了一座桥,他们要尽快的过桥. 桥已经很旧了, 所以它不能承受太重的东西. 任何时候队伍 ...

  6. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  7. HDU 1074 Doing Homework (状压dp)

    题意:给你N(<=15)个作业,每个作业有最晚提交时间与需要做的时间,每次只能做一个作业,每个作业超出最晚提交时间一天扣一分 求出扣的最小分数,并输出做作业的顺序.如果有多个最小分数一样的话,则 ...

  8. 【BZOJ1688】[Usaco2005 Open]Disease Manangement 疾病管理 状压DP

    [BZOJ1688][Usaco2005 Open]Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) ...

  9. 【BZOJ1725】[Usaco2006 Nov]Corn Fields牧场的安排 状压DP

    [BZOJ1725][Usaco2006 Nov]Corn Fields牧场的安排 Description Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M< ...

随机推荐

  1. [HDU5214]Movie解题报告|小水题大智慧

    Movie Cloud and Miceren like watching movies. Today, they want to choose some wonderful scenes from ...

  2. 【51NOD-0】1118 机器人走方格

    [算法]DP #include<cstdio> #include<algorithm> using namespace std; ,maxn=; int f[maxn][max ...

  3. 【HDU】2222 Keywords Search

    [算法]AC自动机 [题解]本题注意题意是多少关键字能匹配而不是能匹配多少次,以及可能有重复单词. 询问时AC自动机与KMP最大的区别是因为建立了trie,所以对于目标串T与自动机串是否匹配只需要直接 ...

  4. bzoj 1057 单调栈

    首先我们可以枚举每个一点,然后向下一直拓展到不能拓展为止,然后向下拓展的同时我们可以算出来向左最多拓展的个数,用单调栈来维护一个上升的序列,这样就类似与悬线法找最大01子矩阵了,但是对于这题01交替来 ...

  5. 制作Solaris系统的USB启动盘

    制作方法: 1. wget http://192.168.2.5/surefiler-installer/2011-12-09/devel-2011.12.9.tgz 2. cd /root tar  ...

  6. 2017-2018-1 《Linux内核原理与设计》第十二周作业

    <linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明   SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...

  7. python基础===多进程

    进程线程的区别在进程,线程,协程的区别 linux或者unix有fork()函数,但是不支持win系统. multiprocessing multiprocessing模块是跨平台版本的多进程模块.支 ...

  8. 安全测试===sqlmap(零)转载

    本文转自:https://blog.werner.wiki/sqlmap-study-notes-0/ 感谢作者的整理,如有侵权,立删 零.前言 这篇文章是我学习Sqlmap的用法时做的笔记,记录了S ...

  9. Microsoft Security Essential: 微软安全软件

    Microsoft Security Essential: 微软安全软件 这个杀毒软件终身免费

  10. 2017多校第7场 HDU 6129 Just do it 找规律

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6129 题意:求a序列后m次xor前缀和 解法: 手动对1位置对每个位置的贡献打表发现 第一次 贡献为 ...