hihoCoder #1162 : 骨牌覆盖问题·三
#1162 : 骨牌覆盖问题·三
描述
前两周里,我们讲解了2xN,3xN骨牌覆盖的问题,并且引入了两种不同的递推方法。
这一次我们再加强一次题目,对于给定的K和N,我们需要去求KxN棋盘的覆盖方案数。
输入
第1行:2个整数N。表示棋盘宽度为k,长度为N。2≤K≤7,1≤N≤100,000,000
输出
第1行:1个整数,表示覆盖方案数 MOD 12357
- Sample Input
-
2 62247088
- Sample Output
-
1399 解题:dfs造转移方程+dp计数+快速幂优化dp
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod = ;
int n,m;
struct Matrix{
int m[<<][<<];
Matrix(){
init();
}
void init(){
memset(m,,sizeof m);
}
Matrix operator*(const Matrix &rhs){
Matrix ret;
for(int k = ; k < (<<n); ++k)
for(int i = ; i < (<<n); ++i)
for(int j = ; j < (<<n); ++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 >= n){
int ss = ;
for(int i = n-; 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 + < n){
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 < n; ++i,xst >>= )
tab[i][] = xst&;
dfs(,st);
}
int main(){
while(~scanf("%d%d",&n,&m)){
b.init();
a.init();
for(int i = ; i < (<<n); ++i) init(i);
a.m[][] = ;
quickPow(m);
printf("%d\n",a.m[][]);
}
return ;
}
hihoCoder #1162 : 骨牌覆盖问题·三的更多相关文章
- hihoCoder #1162 : 骨牌覆盖问题·三 (矩阵快速幂,DP)
题意:有一个k*n的棋盘,要求用1*2的骨牌来铺满,有多少种方案?(k<8,n<100000001) 思路: 由于k是比较小,但是又不那么小,可以专门构造这样的一个矩阵M,使得只要我们有一 ...
- hihoCoder 1143 : 骨牌覆盖问题·一(递推,矩阵快速幂)
[题目链接]:click here~~ 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形 ...
- hihoCoder #1143 : 骨牌覆盖问题·一
#1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题:我们有一个2xN的长条形棋盘,然 ...
- hihoCoder #1143 : 骨牌覆盖问题·一(矩阵乘法)
1143 : 骨牌覆盖问题·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 骨牌,一种古老的玩具.今天我们要研究的是骨牌的覆盖问题: 我们有一个2xN的长条形棋盘,然 ...
- hihoCoder #1143 : 骨牌覆盖问题·一 (斐波那契数列)
题意:我们有一个2xN的长条形棋盘,然后用1x2的骨牌去覆盖整个棋盘.对于这个棋盘,一共有多少种不同的覆盖方法呢? 思路:这是斐波那契数列啊,f[n] = f[n-1] + f[n-2],初始时 f[ ...
- hihoCoder #1151 : 骨牌覆盖问题·二 (矩阵快速幂,DP)
题意:给一个3*n的矩阵,要求用1*2的骨牌来填满,有多少种方案? 思路: 官网题解用的仍然是矩阵快速幂的方式.复杂度O(logn*83). 这样做需要构造一个23*23的矩阵,这个矩阵自乘n-1次, ...
- 骨牌覆盖问题总结!hihoCoder/ NYOJ-1273宣传墙1151
本想着做一下第九届河南省省赛题,结果被这个类似骨牌覆盖的题卡住了,队友然我去hihoCoder上老老实实把骨牌覆盖一.二.三做完,这题就没什么问题了.虽然很不情愿,但还是去见识了一下. 骨牌覆盖问题 ...
- hihocoder #1162 矩阵加速dp
#1162 : 骨牌覆盖问题·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 前两周里,我们讲解了2xN,3xN骨牌覆盖的问题,并且引入了两种不同的递推方法.这一次我 ...
- hihocoder第42周 3*N骨牌覆盖(状态dp+矩阵快速幂)
http://hihocoder.com/contest/hiho42/problem/1 给定一个n,问我们3*n的矩阵有多少种覆盖的方法 第41周做的骨牌覆盖是2*n的,状态转移方程是dp[i] ...
随机推荐
- _bzoj1503 [NOI2004]郁闷的出纳员【Splay】
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1503 由于初始工资未达到下限而离开的员工不算在离开人数之内...坑爹... 然后就是写kth ...
- [ZPG TEST 117] 跑路【构图】
一看懵了,求一条路的长度whose二进制位中1的个数最小?什么鬼. 其实这种n这么小的图论题,应该往Floyd上想了.令f(p, i, j)为从i走长度为2^p长度的路能否到j,若能,则在一张新的图上 ...
- 人工智能-深度学习(2)TensorFlow安装及基本使用(学习笔记)
一.TensorFlow 简介 TensorFlow 是 Google 开源的一款人工智能学习系统.为什么叫这个名字呢? Tensor 的意思是张量,代表 N 维数组:Flow 的意思是流,代表基于数 ...
- java数组实现买彩票(重复则重新遍历查询思想)
package com.wh.shuzu; import java.util.Arrays; /** * 买彩票 * @author 丁璐同学 * 重复则重新遍历查询思想 */ public clas ...
- laravel 淘宝 NPM 镜像
淘宝 NPM 镜像:http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步. 当前 ...
- Windows 8.1设置WIFI共享以及无法启动承载链接解决方案.
1.设置WIFI共享方法 2.无法启动承载链接解决方案 1.设置WIFI共享方法 Windows8 windows8.1笔记本wifi热点 wifi共享.快速将笔记本或者台式机的网络共享给手机,平板等 ...
- iTOP-4418/6818开发板支持双屏异显,双屏同显
iTOP-4418/6818开发板平台安卓系统下支持双屏异显,双屏同显,客户可按照不同用途,分别播放适合屏幕显示方式的内容 ,如HDMI屏幕和LCD屏幕显示不同内容, 一个屏幕播放广告,另一个屏幕运行 ...
- chmod - 改变文件的访问权限
总揽 chmod [options] mode file... POSIX 选项: [-R] GNU 选项 (最短方式): [-cfvR] [--reference=rfile] [--help] [ ...
- mathAge.call(btn) 函数call 改变函数内 this #js
mathAge.call(btn) 函数call 改变函数内 this
- 获取minist数据并转换成lmdb
caffe本身是没有数据集的,但在data目录下有获取数据的一些脚本.MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,每个样本为28*28大小的黑白图片,手写数字为0 ...