第三十三章续:用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案
来源:互联网 发布:网络侵犯肖像权案例 编辑:程序博客网 时间:2024/05/06 06:48
题目描述:
用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案,M<=5,N<2^31,输出答案mod p的结果
矩阵乘法:
#include <iostream> #include <algorithm>#include <functional>using namespace std; #define SIZE (1<<m)#define MAX_SIZE 32class CMatrix{ public: long element[MAX_SIZE][MAX_SIZE]; void setSize(int); void setModulo(int); CMatrix operator* (CMatrix); CMatrix power(int); private: int size; long modulo;};void CMatrix::setSize(int a){ for (int i=0; i<a; i++) for (int j=0; j<a; j++) element[i][j]=0; size = a;}void CMatrix::setModulo(int a){ modulo = a;}CMatrix CMatrix::operator* (CMatrix param){ CMatrix product; product.setSize(size); product.setModulo(modulo); for (int i=0; i<size; i++) for (int j=0; j<size; j++) for (int k=0; k<size; k++) { product.element[i][j]+=element[i][k]*param.element[k][j]; product.element[i][j]%=modulo; } return product;}CMatrix CMatrix::power(int exp){ CMatrix tmp = (*this) * (*this); if (exp==1) return *this; else if (exp & 1) return tmp.power(exp/2) * (*this); else return tmp.power(exp/2);}int main(){ const int validSet[]={0,3,6,12,15,24,27,30}; long n, m, p; CMatrix unit; n=1024;m=3;p=999999; unit.setSize(SIZE); for(int i=0; i<SIZE; i++) for(int j=0; j<SIZE; j++) if( ((~i)&j) == ((~i)&(SIZE-1)) ) { bool isValid=false; for (int k=0; k<8; k++)isValid=isValid||(i&j)==validSet[k]; unit.element[i][j]=isValid; } unit.setModulo(p); printf("%d", unit.power(n).element[SIZE-1][SIZE-1] ); return 0;}
0 0
- 第三十三章续:用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案
- UVA 11270 Tiling Dominoes(用1×2骨牌覆盖n×m棋盘,有多少种方法)
- 用1×2骨牌覆盖n×m棋盘,有多少种方法
- LA 3720 Highway n x m的点阵 有多少条直线穿过至少2个点
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠2*n的大矩形,总共有多少种方法?
- 用任意多个个2*1的小矩形,覆盖2*n的大矩形,请问有多少种覆盖的方法?
- x^1 + x ^2 +...+x ^n = m 求x
- 快速的判断一个数的二进制中有多少个1,快速判断x是不是2^n
- 8*8矩形去掉左上角和右下角用1*2的矩形去填满
- 8*8矩形去掉左上角和右下角用1*2的矩形去填满
- LintCode:M-x的n次幂
- 【矩形覆盖问题分析】 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- uva 11270 1*2骨牌拼矩形的方案数。【轮廓线DP】
- M * N 矩阵的骨牌覆盖问题
- 计算x中有多少个为1的位
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
- Confluence 子页面显示(Children Display)宏
- linux centos 下面安装 apache
- Android进阶(二) Activity调用Service 通过AIDL实现
- 递归实现反向输出字符串
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
- 第三十三章续:用1 x 2的多米诺骨牌填满M x N的矩形有多少种方案
- poj1700 (贪心算法)
- 今天心情不错
- 数据挖掘算法的空间复杂度与时间复杂度分析
- 应用 openssl 工具进行 SSL 故障分析
- 六种订单类型
- 燃一束暖暖的烛光,许个愿吧
- 使用XHProf进行性能测试
- Javascript模块化编程(二):AMD规范