博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2563 Long Dominoes(状态压缩DP)
阅读量:5273 次
发布时间:2019-06-14

本文共 1071 字,大约阅读时间需要 3 分钟。

题目链接:

题目大意:在h*w的矩阵里铺满1*3的小矩阵,共有多少种方法

Sample Input

3 33 100 0

Sample Output

228

分析:状态压缩DP,跟ZOJ 1100 及其相识,不过那道题目使用1*2的木板平铺,题解链接:

  但是不能照搬这道题目的方法,3^9约等于20000,两次循环的话会超时,所以每次只找符合条件的状态。

  每个格子有三种状态0,1,2, 0----横放或者竖放的第三个格子 对下层没有影响,1----竖放的中间那个格子  对下一层有影响,2----竖放的第一个格子    对下两层有影响。

  dp[i][j]表示到第i层状态为j的方法数。     

代码如下:

1 # include
2 # include
3 # include
4 # define LL long long 5 LL dp[31][20000]; 6 int h,w; //高度、宽度 7 int zt,row; //状态、行数 8 int pos[10],dig[10]; 9 void init()10 {11 pos[0] = 1;12 for(int i=1; i<=9; i++)13 pos[i] = pos[i-1]*3;14 }15 16 void get() //得到该状态3进制下的各个位上的数字17 {18 int s=zt,len = 0;19 memset(dig,0,sizeof(dig));20 while(s)21 {22 dig[len++] = s%3;23 s = s/3;24 }25 }26 27 void dfs(int col,int s) //这一行状态s受zt的影响,col表示列,作为标记28 {29 if(col==w) //当到达最大宽度时,需要运算30 {31 dp[row][s] += dp[row-1][zt];32 return;33 }34 if(dig[col]==0) //上一层是035 {36 if(col+2

 

    

转载于:https://www.cnblogs.com/acm-bingzi/p/3353009.html

你可能感兴趣的文章
程序存储问题
查看>>
优雅地书写回调——Promise
查看>>
AX 2009 Grid控件下多选行
查看>>
PHP的配置
查看>>
Struts框架----进度1
查看>>
Round B APAC Test 2017
查看>>
MySQL 字符编码问题详细解释
查看>>
Ubuntu下面安装eclipse for c++
查看>>
Windows 2003全面优化
查看>>
格而知之2:UIView的autoresizingMask属性探究
查看>>
我的Hook学习笔记
查看>>
js中的try/catch
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
整理推荐的CSS属性书写顺序
查看>>
css & input type & search icon
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
0320-学习进度条
查看>>
MetaWeblog API Test
查看>>