FZU 2040 Tiling (矩阵快速幂)
来源:互联网 发布:百度云cdn加速 子域名 编辑:程序博客网 时间:2024/04/28 00:37
题目地址:FZU 2040
重点在于构造矩阵,先状压,然后根据每一行是否与下一行分割了来构造一个2^(m-1)*2^(m-1)的矩阵,然后套上矩阵快速幂就可以了。937ms险过。。
代码如下:
#include <iostream>#include <string.h>#include <math.h>#include <queue>#include <algorithm>#include <stdlib.h>#include <map>#include <set>#include <stdio.h>using namespace std;#define LL __int64#define pi acos(-1.0)const int mod=1e9+7;const int INF=0x3f3f3f3f;const double eqs=1e-9;const int MAXN=200000+10;struct Matrix { LL ma[50][50];} st[7],res;Matrix Mult(Matrix x, Matrix y, int z){ Matrix tmp; for(int i=0; i<z; i++) { for(int j=0; j<z; j++) { tmp.ma[i][j]=0; for(int k=0; k<z; k++) { tmp.ma[i][j]+=x.ma[i][k]*y.ma[k][j]; if(tmp.ma[i][j]>=mod) tmp.ma[i][j]%=mod; } } } return tmp;}Matrix Pow(Matrix x, LL k, int z){ Matrix tmp; int i, j; for(i=0; i<z; i++) for(j=0; j<z; j++) tmp.ma[i][j]=(i==j); while(k) { if(k&1) tmp=Mult(tmp,x,z); x=Mult(x,x,z); k>>=1; } return tmp;}int check(int x, int y, int z){ int ans=1, i, j, last=-1, flag; for(i=0; i<z; i++) { if(x&(1<<i)) { flag=0; if(last>=0&&!(y&(1<<last))) flag=1; for(j=last+1; j<i; j++) { if(y&(1<<j)) { flag=1; break; } } if(!flag&&(y&(1<<i))) { ans*=2; } last=i; } } flag=0; if(last>=0&&!(y&(1<<last))) flag=1; for(j=last+1; j<z; j++) { if(y&(1<<j)) { flag=1; break; } } if(!flag) { ans*=2; } return ans;}void init(){ int i, j, k, tot; for(i=1; i<=6; i++) { tot=1<<i-1; for(j=0; j<tot; j++) { for(k=0; k<tot; k++) { st[i].ma[j][k]=check(j,k,i-1); } } }}int main(){ int t, n, i, j, Case=0, tot; LL ans, m; init(); scanf("%d",&t); while(t--) { scanf("%d%I64d",&n,&m); tot=1<<n-1; res=Pow(st[n],m-1,tot); ans=0; for(i=0; i<tot; i++) { for(j=0; j<tot; j++) { ans+=res.ma[i][j]; if(ans>=mod) ans%=mod; } } printf("Case %d: %I64d\n",++Case,ans); } return 0;}
1 0
- FZU 2040 Tiling (矩阵快速幂)
- POJ3420 Quad Tiling DP + 矩阵快速幂
- POJ3420Quad Tiling(矩阵快速幂)
- POJ - 3420 Quad Tiling (矩阵快速幂)
- fzu 1683(矩阵快速幂)
- fzu 1692(矩阵快速幂)
- FZU 1911 矩阵快速幂
- FZU 1911【矩阵快速幂】
- TOJ 3848 FZU 1683 矩阵快速幂
- fzu 2173 floyd+矩阵快速幂
- FZU 1683 纪念SlingShot(矩阵快速幂)
- FZu 1683 纪念SlingShot 矩阵快速幂
- FZU - 1683 纪念SlingShot 矩阵快速幂
- FZU - 1692 Key problem 矩阵快速幂
- FZU 2198 快来快来数一数(矩阵快速幂)
- Fzu 2198 快来快来数一数【矩阵快速幂】
- [动态规划+矩阵快速幂优化]Pku3420--Quad Tiling
- POJ 3420 Quad Tiling 状压DP+矩阵快速幂
- IOS:判断邮箱格式是否正确
- 关于第三方开源库GreenDao的使用心得
- ARC中使用MRC文件
- Android内存阀值修改--内存回收机制配置
- 引发“System.Windows.Forms.AxHost+InvalidActiveXStateException”的异常解决
- FZU 2040 Tiling (矩阵快速幂)
- 黑马程序员JAVA 090---100 小结
- 【学习笔记】git常用命令 及中文环境设置
- qemu KVM kernel module no such file or directory
- C# 绘图双缓冲技术总结
- 朴素贝叶斯分类——R语言e1071 and klaR包初体验
- webView 网页 的JS交互
- 整合 Spring mvc mybatis 的错误
- leetcode || 53、Maximum Subarray