POJ 3420 矩阵乘法
2012-10-11 19:15
288 查看
题意:
4*N的矩形中放入1*2的小矩形有多少种放法
分析:
表示公式不会推导。。没找着有人推公式的证明了。。。
求证明、、、
f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)
手动算出来前4项,然后处理线性递推式就好了~
View Code
4*N的矩形中放入1*2的小矩形有多少种放法
分析:
表示公式不会推导。。没找着有人推公式的证明了。。。
求证明、、、
f(n)=f(n-1)+5*f(n-2)+f(n-3)-f(n-4)
手动算出来前4项,然后处理线性递推式就好了~
View Code
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> using namespace std; struct MT { int x,y; int mt[7][7]; }ans,def; int n,m; inline MT operator *(MT a,MT b) { MT c; memset(c.mt,0,sizeof c.mt); c.x=a.x; c.y=b.y; for(int i=1;i<=a.x;i++) for(int j=1;j<=b.y;j++) for(int k=1;k<=a.y;k++) c.mt[i][j]=(c.mt[i][j]+(a.mt[i][k]%m)*(b.mt[k][j]%m))%m; return c; } void go() { while(n) { if(n&1) ans=def*ans; def=def*def; n>>=1; } printf("%d\n",ans.mt[4][1]); } bool prev() { if(n==1) {printf("%d\n",1%m);return false;} else if(n==2) {printf("%d\n",5%m);return false;} else if(n==3) {printf("%d\n",11%m);return false;} n-=4; memset(def.mt,0,sizeof def.mt); def.mt[1][2]=def.mt[2][3]=def.mt[3][4]=1; def.mt[4][1]=-1; def.mt[4][2]=1; def.mt[4][3]=5; def.mt[4][4]=1; def.x=def.y=4; ans.x=4; ans.y=1; ans.mt[1][1]=1; ans.mt[2][1]=5; ans.mt[3][1]=11; ans.mt[4][1]=36; return true; } int main() { while(scanf("%d%d",&n,&m),n) { if(!prev()) continue; else go(); } return 0; }
相关文章推荐
- POJ-3420 Quad Tiling 状态压缩+矩阵乘法
- POJ-3420 回顾矩阵乘法解递推.再次提醒自己矩阵木有交换率.
- poj3420 Quad Tiling 矩阵乘法
- poj 3420 Quad Tiling 【矩阵乘法】
- POJ 3420 构造矩阵乘法
- POJ 3420 Quad Tiling (矩阵乘法)
- POJ 3213 PM3 矩阵乘法优化
- POJ-3070 Fibonacci 矩阵乘法
- POJ 3233 矩阵乘法
- poj 3070 Fibonacci(矩阵乘法快速幂)
- 数学(矩阵乘法,随机化算法):POJ 3318 Matrix Multiplication
- POJ 3318 Matrix Multiplication(矩阵乘法)
- [随机化 矩阵乘法] BZOJ 2396 神奇的矩阵 & 51Nod 1140 矩阵相乘结果的判断 & POJ 3318 Matrix Multiplication
- POJ 3233 Matrix Power Series 二分+矩阵乘法
- POJ 2888 Magic Bracelet [Polya 矩阵乘法]
- poj 2748 Logs Stacking (递推找规律|矩阵乘法)
- 【POJ】3150 Cellular Automaton(矩阵乘法+特殊的技巧)
- POJ 3420 (矩阵二分幂优化,状压DP)
- POJ 2778 DNA Sequence [AC自动机 矩阵乘法]
- Poj 3734 Blocks(DP,矩阵乘法优化)