ZOJ 2563 Long Dominoes(状态压缩DP)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1563
题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法
Sample Input
3 3
3 10
0 0
Sample Output
2
28
分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:http://www.cnblogs.com/acm-bingzi/p/3289994.html
但是不能照搬这道题目的方法,3^9约等于20000,两次循环的话会超时,所以每次只找符合条件的状态。
每个格子有三种状态0,1,2, 0----横放或者竖放的第三个格子 对下层没有影响,1----竖放的中间那个格子 对下一层有影响,2----竖放的第一个格子 对下两层有影响。
dp[i][j]表示到第i层状态为j的方法数。
代码如下:
# include<stdio.h>
# include<string.h>
# include<math.h>
# define LL long long
LL dp[][];
int h,w; //高度、宽度
int zt,row; //状态、行数
int pos[],dig[];
void init()
{
pos[] = ;
for(int i=; i<=; i++)
pos[i] = pos[i-]*;
} void get() //得到该状态3进制下的各个位上的数字
{
int s=zt,len = ;
memset(dig,,sizeof(dig));
while(s)
{
dig[len++] = s%;
s = s/;
}
} void dfs(int col,int s) //这一行状态s受zt的影响,col表示列,作为标记
{
if(col==w) //当到达最大宽度时,需要运算
{
dp[row][s] += dp[row-][zt];
return;
}
if(dig[col]==) //上一层是0
{
if(col+<w && dig[col+]== && dig[col+]==) //横着放,下一层为0
dfs(col+,s);
dfs(col+,s+*pos[col]); //竖着放,下一次为2
}
else if(dig[col]==) //上一层为1时下一层只能为0
dfs(col+,s);
else
dfs(col+,s+pos[col]); //上一层为2时下一层只能为1
} int main()
{
init();
while(scanf("%d%d",&w,&h),h+w)
{
if((h*w)%) //这种情况下无论如何也不能填满
{
printf("0\n");
continue;
}
memset(dp,,sizeof(dp));
dp[][] = ;
for(row=; row<=h; row++)
for(zt=; zt<pos[w]; zt++)
{
if(dp[row-][zt])
{
get();
dfs(,);
}
}
printf("%lld\n",dp[h][]);
}
return ;
}
ZOJ 2563 Long Dominoes(状态压缩DP)的更多相关文章
- ZOJ 3471 【状态压缩DP】
题意: 有n种化学物质,他们彼此反应会有一种消失并释放出能量. 给出矩阵,第i行j列代表i和j反应j消失释放的能量. 求最大释放多少能量. 思路: 状态压缩DP,我是这么想的. 利用二进制0代表该物质 ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- POJ 3254 Corn Fields(状态压缩DP)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 4739 Accepted: 2506 Descr ...
- [知识点]状态压缩DP
// 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...
- HDU-4529 郑厂长系列故事——N骑士问题 状态压缩DP
题意:给定一个合法的八皇后棋盘,现在给定1-10个骑士,问这些骑士不能够相互攻击的拜访方式有多少种. 分析:一开始想着搜索写,发现该题和八皇后不同,八皇后每一行只能够摆放一个棋子,因此搜索收敛的很快, ...
- DP大作战—状态压缩dp
题目描述 阿姆斯特朗回旋加速式阿姆斯特朗炮是一种非常厉害的武器,这种武器可以毁灭自身同行同列两个单位范围内的所有其他单位(其实就是十字型),听起来比红警里面的法国巨炮可是厉害多了.现在,零崎要在地图上 ...
- 状态压缩dp问题
问题:Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Ev ...
- BZOJ-1226 学校食堂Dining 状态压缩DP
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MB Submit: 588 Solved: 360 [Submit][ ...
- Marriage Ceremonies(状态压缩dp)
Marriage Ceremonies Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu ...
随机推荐
- Js 赋值传值和引用传址
赋值传值和引用传址 在JavaScript中基本数据类型都是赋值传值,复合数据类型都是引用传址(传地址) 基本数据类型的变量名和数据是直接存在"快速内存"(栈内存)中,而复合数据类 ...
- 使用Script元素发送JSONP请求
// 根据指定URL发送一个JSONP请求 //然后把解析得到的相应数据传递给回调函数 //在URL中添加一个名为jsonp的查询参数,用于指定该请求的回调函数的名称 function getJSON ...
- ClassLoader源码
最近找工作,面试网易和微策略,都问到了ClassLoader这个东西,看来应该是比较重要的,所以在这总结一下,嗯,类源码有点长,慢慢看吧. 翻译一下,不当之处欢迎指正. /** * A class l ...
- Contiki系统介绍
本文内容来源为contiki英文介绍,自己为了学习,将其大致翻译成中文,以便了解. 欢迎转载,转载请注明来源,如果有什么翻译不合适的地方,请留言指出,相互交流学习. 介绍 Contiki是一个开放源码 ...
- 视酷即时通讯系统应用源码 V1.0
视酷即时通讯系统(原创),成熟稳定,拥有和微信一样强大的功能不再是梦,节省几个月研发时间迅速融合进项目中: 1.首家支持聊天室群聊 2.支持和微信一样的语音聊天,可以显示时长.未读状态,自动轮播未读语 ...
- javascript 代码优化工具 UglifyJS
安装: 1. 安装 node.js 环境 (这个不用我教了吧,网上教程一大堆哦.) 2. 进入 https://github.com/mishoo/UglifyJS 右上角 “Download” Z ...
- Linux ps 命令获取查询结果中的单列信息
1.查看所有进程信息,但是只想获取COMMAND列的值 SDCxM-SDCAM-root-root> ps auxUSER PID %CPU %MEM VSZ RSS TT ...
- PostgreSQL+PostGIS的使用 函数清单
一. PostgreSQL与PostGIS的关系 PostgreSQL 是世界上技术最先进的开源数据库,其前身是1977年一个源于Berkeley名为Ingres的非关系型数据库,其项目领导人为Mic ...
- HTML 背景图片自适应
CSS body.loginpage { background-image: url(../images/background-image.jpg); background-size:cover; } ...
- EXTJS 资料 Ext.Ajax.request 获取返回数据
下面是一个登陆页面调用的EXTJS login function,通过 url: '/UI/HttpHandlerData/Login/Login.ashx',获取返回登陆账户和密码! Ext.onR ...