vijos上的题解:

1.因为每个格子不是被覆盖就是没被覆盖,状态只有0 1两种,m<=5,所以可以将每一列的状态压缩,看作一个二进制数.
2.矩阵G表示从I状态到J状态的路径条数,自乘N次为长度为N的路径条数。
3.矩阵乘法可以用快速幂优化,时间复杂度为O(logN*(2^M)^3)可以接受
4.用I表示前一个状态,J表示这个状态,则I可以到达J的条件是:(K = 2^M - 1 )
I OR J = K 且 I AND J = AG[W]
I状态未能填满的格子均由横向1*2的骨牌填充,此时J状态相应的位置也填充了骨牌,因此要满足I OR J = K,即I和J状态此时互补。
又在J状态下可以继续填充竖向2*1的骨牌,这些骨牌的位置可由I AND J得到,所以I AND J必须满足 I AND J = AG[W]
AG[W]为在宽度为M是竖向填充2*1的骨牌的所有方案。
ag:Array[0..7]of longint = (0,3,6,12,15,24,27,30);
把里面的数字转换成2进制就知道这个数组的干吗用的了。
5.再次感谢matrix67大牛,膜拜ing...

还有需要弄清的问题是把每个数字转换为2进制后,1表示此位置被覆盖,0表示未被覆盖。但为什么需要 i  or  j=1<<m -1 并且 i and j=这些奇怪的数字呢?

其实我们可以这样考虑,我们现在所在的这一行,假设是n行,要过度到n+1行,所以这一行上面的0必须被填上,这样n+1行的同一个位置必定有1,

这是横着铺了一个骨牌的结果,所以i or j=1<<m-1

那为什么要有i and j=那些呢?

我们思考,当把第n行铺满之后,在n+1行上竖着铺放骨牌还可以得到不同的方案数,而这时能铺的只有n行的1所在的位置,而且必须是若干个两个连着的1。

而 i and j 的1所在位置就是新铺的竖着的骨牌,它必须等于某些特定的值,而不能等于其它的值 比如 01010 这是显然不可能,他是怎么铺上的呢?

事实上,我们把AG数组的所有转化为二进制即:

00000,00011,00110,01100,01111,11000,11011,11110

这为我们提供了所有可行的i and j 的值

Q.E.D

代码:

 const ag:array[..]of longint=(,,,,,,,);
type matrix=array[..,..] of longint;
var a,b:matrix;
i,j,k,m,n,p,ans:longint;
function mo(x:longint):longint;
begin
mo:=x mod p;
end;
procedure init;
begin
readln(n,m,p);
fillchar(a,sizeof(a),);
fillchar(b,sizeof(b),);
m:=(<<m)-;
for i:= to m do
for j:= to m do
if i or j=m then
for k:= to do
if i and j=ag[k] then a[i,j]:=;
for i:= to m do b[i,i]:=;
end;
procedure mul(var x,y,z:matrix);
var t:matrix;
i,j,k:longint;
begin
fillchar(t,sizeof(t),);
for i:= to m do
for j:= to m do
for k:= to m do
t[i,j]:=mo(t[i,j]+x[i,k]*y[k,j]);
z:=t;
end;
procedure ksm(cs:longint);
begin
while cs<> do
begin
if cs and = then mul(a,b,b);
cs:=cs>>;
mul(a,a,a);
end;
end;
procedure main;
begin
ksm(n);
writeln(b[m,m]);
end;
begin
init;
main;
end.

还有一个小问题,这里A数组自乘了n次,而且最后直接输出了b[m,m],这是为什么呢?

我们可以假想初始状态为0行铺满了格子,每乘一次都得到了下一行的结果,所以n此后得到了第n行的结果,A[n,n]表示的就是从第0行铺满到第n行铺满的方案数。

vijos1194 Domino的更多相关文章

  1. BPM Domino集成解决方案

    一.需求分析 Lotus Notes/Domino是IBM的协同办公平台,在国内有广泛的用户. 但由于推出年头较早.采用文档数据库等特点, 导致其流程集成能力弱.统计分析难.不支持移动办公等问题,很多 ...

  2. 【转载】给那些想多学习,多进步的Domino初学者

    在这个社区里面,包括QQ技术群里面混了很久了.遇到了很多Domino初学者,也认识了很多致力于Domino这个技术领域的朋友,很开心.很久没有写长篇大论给大家了.我要把一些想法写出来,共大家参考.讨论 ...

  3. FineReport中Domino数据库连接方法

    1. 概述 Domino是文档型数据库而非关系型数据库,连接Domino可以使用JDBC方式或者ODBC方式,使用JDBC方式需要安装Lotus Domino Driver for JDBC并且此方法 ...

  4. IBM Domino 9 出现 Server Controller 未在主机上运行或未在端口2050监听 解决方案

    如果在网上搜索的方法,比如防火墙开端口还没有解决的话,那么我的解决方案可能会解决你的问题. 出现的场景: 我先装了Notes,Designer,后装Domino Server, 配置Domino服务器 ...

  5. CF 405B Domino Effect(想法题)

    题目链接: 传送门 Domino Effect time limit per test:1 second     memory limit per test:256 megabytes Descrip ...

  6. [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)

    Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...

  7. 如何开发Domino中的WebService

    在domino中写webservice可以使用LotusScript,也可以使用java,由于LotusScript API提供的功能多数都是操作domino数据库中文档的,在web service中 ...

  8. 结合Domino打造全功能的Grid

    1.       需求说明: 在domino开发中我们经常会遇到表单上需要一个类似table的组件,你可以增删改等.比如我有一个张报核单据,上面需要详细列出每项金额的明细,我们先看完成后的效果: 上面 ...

  9. 关于Domino数据库的软删除

    在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...

随机推荐

  1. wampsever在win10中安装扩展掉坑

    1.必须要退出wampserver 2.php pecl + 3.wampserver 64 3.0.6

  2. Linux分类笔记(一)-权限管理

    Linux分类笔记(一) 权限管理 普通权限 文件的普通权限 对一个普通的文件使用ls -ll命令后,看到下面的输出内容   而对于文件权限中的每一位,又分别代表了以下的意思 文件类型又有以下几类: ...

  3. 1078. Hashing (25)

    时间限制 100 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task of this problem is simp ...

  4. C语言获取网页源代码的学习所得

    研究了一天这个玩意感觉挺有意思的. 刚开始是什么都不懂,现在写出来一段代码感觉略微有点意思了. 下面我分享一下学习过程和自己的理解. 整体过程大概就是如下情况: 先搜了一下别人的写这个东西的代码. 研 ...

  5. 十八、mysql 内存优化 之 myisam

    .key_buffer 索引块大小 set global hot_cache.key_buffer_size = ; //设置大小 show variables like 'key_buffer_si ...

  6. SPOJ 4487 Splay 基本操作

    插入操作,删除操作和置换操作都是单点的,所以不需要lazy标记.这个很简单,都是两次RotateTo,一次Splay操作就搞定. 求最大连续字段和的操作和线段树的题目类似,只需要保存最左边的连续最大字 ...

  7. window live writer的曲折安装过程

           之前一直使用windows live writer2012写日志,由于之前重装了系统,所以需要重新安装writer,本以为是一个很简单的过程,你就是安装个软件吗.... 然而事实是... ...

  8. [转载]OpenFileDialog对话框Filter属性

    首先说明一个示例,分析一下Filter属性的构成:“ Excel文件|*.xls ”,前面的“Excel文件”成为标签,是一个可读的字符串,可以自定定义,“|*.xls”是筛选器,表示筛选文件夹中后缀 ...

  9. 转Spring+Hibernate+EHcache配置(三)

    配置每一项的详细作用不再详细解释,有兴趣的请google下 ,这里需要注意一点defaultCache标签定义了一个默认的Cache,这个Cache是不能删除的,否则会抛出No default cac ...

  10. Firefly安装说明 与 常见问题

    原地址:http://bbs.gameres.com/thread_223688.html 第三方库依赖:    twisted, python-memcached ftp://ftp.tummy.c ...