hihoCode #1151 : 骨牌覆盖问题·二
#1151 : 骨牌覆盖问题·二
描述
上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?
所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢?
首先我们可以肯定,奇数长度一定是没有办法覆盖的;对于偶数长度,比如2,4,我们有下面几种覆盖方式:

输入
第1行:1个整数N。表示棋盘长度。1≤N≤100,000,000
输出
第1行:1个整数,表示覆盖方案数 MOD 12357
- Sample Input
-
62247088
- Sample Output
-
4037 解题:造转移方程
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = ;
struct Matrix{
int m[][];
Matrix(){
init();
}
void init(){
memset(m,,sizeof m);
}
Matrix operator*(const Matrix &rhs){
Matrix ret;
for(int k = ; k < ; ++k)
for(int i = ; i < ; ++i)
for(int j = ; j < ; ++j)
ret.m[i][j] = (ret.m[i][j] + m[i][k]*rhs.m[k][j])%mod;
return ret;
}
void print(){
for(int i = ; i < ; ++i){
for(int j = ; j < ; ++j)
printf("%d ",m[i][j]);
cout<<endl;
}
}
};
Matrix a,b;
void quickPow(LL index){
while(index){
if(index&) a = a*b;
index >>= ;
b = b*b;
}
}
bool tab[][];
void dfs(int cur,int st){
if(cur >= ){
int ss = ;
for(int i = ; i >= ; --i){
ss <<= ;
ss |= tab[i][];
}
b.m[st][ss]++;
return;
}
if(!tab[cur][]){
if(!tab[cur][]){
tab[cur][] = tab[cur][] = true;
dfs(cur+,st);
tab[cur][] = tab[cur][] = false;
}
if(cur + < ){
if(!tab[cur+][]){
tab[cur+][] = tab[cur][] = true;
dfs(cur+,st);
tab[cur+][] = tab[cur][] = false;
}
}
}else dfs(cur + ,st);
}
void init(int st){
memset(tab,false,sizeof tab);
for(int i = ,xst = st; i < ; ++i,xst >>= )
tab[i][] = xst&;
dfs(,st);
}
int main(){
int n;
while(~scanf("%d",&n)){
b.init();
a.init();
for(int i = ; i <= ; ++i) init(i);
a.m[][] = ;
quickPow(n);
printf("%d\n",a.m[][]);
}
return ;
}
hihoCode #1151 : 骨牌覆盖问题·二的更多相关文章
- hiho #1151 : 骨牌覆盖问题·二 (递推,数论)
#1151 : 骨牌覆盖问题·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题? ...
- hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
题意:给一个3*n的矩阵,要求用1*2的骨牌来填满,有多少种方案? 思路: 官网题解用的仍然是矩阵快速幂的方式.复杂度O(logn*83). 这样做需要构造一个23*23的矩阵,这个矩阵自乘n-1次, ...
- hiho42 : 骨牌覆盖问题·二
描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘,使用1x2的骨牌去覆盖一共有多少种不同的覆盖方法呢?首先我们可以肯定, ...
- [hihoCoder] 骨牌覆盖问题·二
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上一周我们研究了2xN的骨牌问题,这一周我们不妨加大一下难度,研究一下3xN的骨牌问题?所以我们的题目是:对于3xN的棋盘 ...
- 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下. 骨牌覆盖问题 ...
- 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3
先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...
- hiho #1143 : 骨牌覆盖问题·一 (运用快速幂矩阵)
#1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然 ...
- hiho41 : 骨牌覆盖问题·一
原问题:骨牌覆盖问题 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然后用1x2的 ...
- hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...
随机推荐
- 转-MySQL for Mac 安装和基本操作
一.安装mysql 1.mysql下载地址:http://dev.mysql.com/downloads/mysql/ 2.安装软件包位于硬盘映象(.dmg)文件中,必须首先双击搜索起中的图标来安装该 ...
- oracle (DBaaS) 服务介绍
转 https://oracle-base.com/articles/vm/oracle-cloud-database-as-a-service-dbaas-create-service?utm_so ...
- RabbitMQ七:交换机类型Exchange Types--Fanout 介绍
前言 最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange. 其中之前我们用 ...
- Html标签杂记
<html> <head> <title> </title> </head> <body> </body> < ...
- java获取公网ip以及物理地址和代理商
package ipconfig; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStr ...
- (Android MVVM)使用Data Binding Library(2)
复习 上一篇学到了如何在layout.xml文件中增加元素,实现数据绑定,本篇接着学习. 事件处理 在layout.xml上绑定事件有两种方法,各有千秋. 1.方法引用 2.监听绑定 1.使用方法引用 ...
- 新奇:(nodejs兄弟)用HTML + FLASH +JS 也可以写桌面EXE。
首先看下面这张图片,下面的所有界面都是用html代码实现的. 编程IDE:vb6.0 使用控件:WEBBROWSER 原理:使用olelib 让程序继承:IDocHostUIHandler 和 ICu ...
- Jvisualvm--JAVA性能分析工具
JDK自带的JAVA性能分析工具.它已经在你的JDK bin目录里了,只要你使用的是JDK1.6 Update7之后的版本.点击一下jvisualvm.exe图标它就可以运行了. 这里是VisualV ...
- MVC学习(一)
http://www.cnblogs.com/QLeelulu/archive/2008/09/30/1302462.html
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave (堆优化dijkstra)
题目描述 The good folks in Texas are having a heatwave this summer. Their Texas Longhorn cows make for g ...