多米诺骨牌 优化版

算法:

在之前搜索出状态的基础上,再压缩一次状态。

View Code
//by yefeng
#include<iostream>
using namespace std;typedef long long LL; 
const int mod = 9937;
int mask,idx, n , m;struct Matrix{int mat[257][257];void zero(){     memset(mat,0,sizeof(mat));  }    void unit(){memset(mat,0,sizeof(mat));for(int i = 0; i <= mask; i++) mat[i][i] = 1;    }
}A,T;
Matrix operator *(const Matrix &a,const Matrix &b){Matrix tmp; tmp.zero();for(int i = 0; i < idx; i++){for(int k = 0; k < idx; k++){if( a.mat[i][k] == 0 ) continue;for(int j = 0; j < idx; j++){tmp.mat[i][j] += (a.mat[i][k]*b.mat[k][j])%mod;tmp.mat[i][j] %= mod;    }    }    }    return tmp;
}
Matrix operator ^(Matrix x,int k){Matrix tmp; tmp.unit();while(k){if(k&1) tmp = tmp*x;x = x*x; k >>= 1;    }    return tmp;
}
int vis[300],id[300],v[300];//检查横放状态 
bool check(int x){bool flag=true;for(int i = 0; i < m; i++){if( !( x &(1<<i) ) ) continue;   //如果第i位不为1,就continue if( (i == m-1) || !( x & (1<<(i+1)) ) ){ //判断第i + 1位是否为1. flag = false; break;    }i++;}    return flag;
}
void DFS(int x){if(vis[x]) return; vis[x]=1;if( id[x] == -1 ) id[x] = idx++;int c = (~x) & mask;for(int i = 0; i <= mask; i++){if( (i&c) == c && check( i&x ) ){  //i&c == c保证两层之间不能同时有0 if(id[i] == -1) id[i] = idx++;T.mat[ id[i] ][ id[x] ] += 1;if( !vis[i] ) DFS(i);    }    }    
}
void init(){T.zero(); idx = 0;memset(vis,0,sizeof(vis));memset(id,0xff,sizeof(id));memset(v,0,sizeof(v));idx = 0; DFS(mask);  for(int i = 0; i <= mask; i++){if( ~id[i] && T.mat[id[i]][0] )v[ id[i] ] = 1;    }
}
void solve(int k){A = T^(k-1);LL res = 0;for(int i = 0; i < idx; i++) res = ( res+ v[i]*A.mat[i][0] ) % mod;printf("%I64d\n", res);    
}int main(){//freopen("F.in", "r", stdin );//freopen("1.out", "w", stdout );int a, b;while( ~scanf("%d%d",&a,&b)){n = max(a,b), m = min(a,b); if( m == 1 ){if(n&1) puts("0");else    puts("1");    continue;}mask = (1<<m)-1;init();solve(n);        }
}

转载于:https://www.cnblogs.com/tangcong/archive/2012/08/18/2645585.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/361468.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache Camel请向我解释这些端点选项的含义

在即将发布的Apache Camel 2.15中&#xff0c;我们使Camel更智能。 现在&#xff0c;它可以充当老师&#xff0c;并向您说明其配置方式以及这些选项的含义。 Camel可以做的第一课是告诉您如何配置所有端点以及这些选项的含义。 接下来我们要学习的课程是让Camel解释EIP的选项…

JS正则表达式的基础用法

RegExp&#xff08;正则表达式&#xff09;对象 正则表达式是一个描述字符模式的对象&#xff0c;可以处理更复杂的字符串。进行匹配替换。 常用的修饰符&#xff1a; i/m/g 使用方法&#xff1a; 【声明方法一: new RegExp(value)】 var patt new RegExp(value)&#xff1b…

JS获取屏幕浏览器网页高度和宽度属性

1 网页可见区域宽&#xff1a;document.body.clientWidth 2 网页可见区域高&#xff1a;document.body.clientHeight 3 网页可见区域宽&#xff1a;document.body.offsetWidth (包括边线的宽) 4 网页可见区域高&#xff1a;document.body.offsetHeight (包括边线的宽) 5 网页正…

微信扫码进入小程序

这几天开发完小程序之后&#xff0c;需要实现微信扫码进入小程序&#xff0c;坎坎坷坷的过程终于实现了&#xff0c;现在做一总结&#xff1a; 1、配置二维码规则&#xff1a; 2、页面插入代码即可&#xff1a; onLoad: function(options) {console.log("index 生命周期 o…

使用用户名/密码和Servlet安全性保护WebSockets

RFC 6455提供了WebSockets安全注意事项的完整列表。 其中一些是在协议本身中烘焙的&#xff0c;其他一些则需要更多有关如何在特定服务器上实现它们的解释。 让我们谈谈协议本身内置的一些安全性&#xff1a; HTTP请求中的Origin头仅包含标识发起该请求的主体&#xff08;网页…

文件的读取

这几天在研究文件读取问题&#xff0c;写了个小demo&#xff0c;如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title> </head> <body><input type…

关于stm32启动文件的选择

关于stm32启动文件的选择 1推荐- startup_stm32f10x_ld_vl.s: for STM32 Low density Value line devices - startup_stm32f10x_ld.s: for STM32 Low density devices - startup_stm32f10x_md_vl.s: for STM32 Medium density Value line devices - startup_stm32f10x_md.s: fo…

如何使用GZip和Jersey压缩Java REST API中的响应

在某些情况下&#xff0c;您的REST api会提供非常长的响应&#xff0c;我们都知道移动设备/网络上的传输速度和带宽仍然非常重要。 我认为这是开发支持移动应用程序的REST api时需要解决的第一个性能优化点。 你猜怎么了&#xff1f; 因为响应是文本&#xff0c;所以我们可以压…

C函数篇(recv函数)

简述 从一个套接口接收数据。表头文件&#xff1a;#include<sys/types.h>#include<sys/socket.h>int PASCAL FAR recv( SOCKET s, char FAR* buf, int len, int flags);s&#xff1a;一个标识已连接套接口的描述字。buf&#xff1a;用于接收数据的缓冲区。len&…

js文字排序的方法

拼音排序&#xff1a; var arr [{ a: 1, b: "我" }, { a: 1, b: "是" }, { a: 1, b: "帅" }, { a: 1, b: "哥" }, { a: 1, b: "你" }, { a: 1, b: "服" }, { a: 1, b: "不" }];arr.sort(function comp…

线程池之外:Java并发并不像您想象的那么糟糕

Apache Hadoop&#xff0c;Apache Spark&#xff0c;Akka&#xff0c;Java 8流和Quasar&#xff1a; 针对Java开发人员的经典用例以及最新的并发方法 关于并发性更新概念的讨论很多&#xff0c;但是许多开发人员还没有机会将他们的想法缠住。 在本文中&#xff0c;我们将详细介…

编写高质量的代码,改善c#程序的157个建议_之1~10

//编写高质量的代码&#xff0c;改善c#程序的157个建议# 1、正确操作字符串## 1* 确保尽量少的装箱* 避免分配额外的内存空间1. 会进行一次装箱C#string str1"str1"9;2. 没有装箱&#xff0c;调用的是整型的ToString方法C#string str2"str2"9.ToString();#…

vue中使用Ueditor编辑器 -- 1

一、 下载包&#xff1a; 从Ueditor的官网下载1.4.3.3jsp版本的Ueditor编辑器&#xff0c;官网地址为&#xff1a;http://ueditor.baidu.com/website/download.html 下载解压后会得到如果下文件目录&#xff1a; 将上述Ueditor文件夹拷贝到vue项目的static文件夹中&#xff0…

编译原理--递归下降分析实验C++

一、实验项目要求 1.实验目的 根据某一文法编制调试递归下降分析程序&#xff0c;以便对任意输入的符号串进行分析。本次实验的目的主要是加深对递归下降分析法的理解。 2.实验要求 对下列文法&#xff0c;用递归下降分析法对任意输入的符号串进行分析&#xff1a; &#…

浅析路径遍历漏洞 文/饭

许多的Web应用程序一般会有对服务器的文件读取查看的功能&#xff0c;大多会用到提交的参数来指明文件名&#xff0c;形如&#xff1a;http://www.nuanyue.com/getfileimage.jgp 当服务器处理传送过来的image.jpg文件名后&#xff0c;Web应用程序即会自动添加完整路径&#xff…

摆脱困境:在DbUnit数据集中使用空值

如果我们正在为使用Spring Framework的应用程序编写集成测试&#xff0c;则可以通过使用Spring Test DbUnit将DbUnit与Spring测试框架集成。 但是&#xff0c; 这种集成并非没有问题 。 通常&#xff0c;我们必须在运行测试之前向数据库中插入空值&#xff0c;或者验证保存到…

artdialog5 bug

1.使用artdialog5时&#xff0c;使用两个输入框传值&#xff0c;一直无法取到值&#xff0c;使用简单的ID无法取到值&#xff0c;如idbranch..改为idbranch_str_dialog就可以了&#xff0c;问题是解决了&#xff0c;可是没有找到原因所在&#xff01; 转载于:https://www.cnblo…

vue中通过js控制页面样式方法

在使用vue.js框架的时候&#xff0c;有时候会希望在页面渲染完成之后&#xff0c;再执行函数方法来处理初始化相关的操作&#xff0c;如果只处理页面位置、宽或者高时&#xff0c;必须要在页面完全渲染之后才可以&#xff0c;页面没有加载完成之前&#xff0c;获取到的宽高不准…

Memcached入门指南

1 概览 Memcached是一个免费开源&#xff0c;高性能的&#xff0c;分布式内存对象缓存系统&#xff0c;为了加快动态web应用程序&#xff0c;减轻数据库负载。 Memcached是一个内存中的基于键/值存储任意数据小片段&#xff08;字符&#xff0c;对象&#xff09;&#xff0c;存…

css正則匹配、模糊匹配

//所有class包含font-red的p标签 p[class~"font-red"] {color: red;} [abc^"def"] 选择 abc 属性值以 "def" 开头的所有元素 [abc$"def"] 选择 abc 属性值以 "def" 结尾的所有元素 [abc*"def"] 选择 abc 属性值中…