博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3420 矩阵乘法
阅读量:5273 次
发布时间:2019-06-14

本文共 1530 字,大约阅读时间需要 5 分钟。

题意:

4*N的矩形中放入1*2的小矩形有多少种放法

分析:

表示公式不会推导。。没找着有人推公式的证明了。。。

求证明、、、

手动算出来前4项,然后处理线性递推式就好了~

 

View Code
1 #include 
2 #include
3 #include
4 #include
5 6 using namespace std; 7 8 struct MT 9 {10 int x,y;11 int mt[7][7];12 }ans,def;13 14 int n,m;15 16 inline MT operator *(MT a,MT b)17 {18 MT c;19 memset(c.mt,0,sizeof c.mt);20 c.x=a.x; c.y=b.y;21 for(int i=1;i<=a.x;i++)22 for(int j=1;j<=b.y;j++)23 for(int k=1;k<=a.y;k++)24 c.mt[i][j]=(c.mt[i][j]+(a.mt[i][k]%m)*(b.mt[k][j]%m))%m;25 return c;26 }27 28 void go()29 {30 while(n)31 {32 if(n&1) ans=def*ans;33 def=def*def;34 n>>=1;35 }36 printf("%d\n",ans.mt[4][1]);37 }38 39 bool prev()40 {41 if(n==1) {printf("%d\n",1%m);return false;}42 else if(n==2) {printf("%d\n",5%m);return false;}43 else if(n==3) {printf("%d\n",11%m);return false;}44 n-=4;45 46 memset(def.mt,0,sizeof def.mt);47 def.mt[1][2]=def.mt[2][3]=def.mt[3][4]=1;48 def.mt[4][1]=-1; def.mt[4][2]=1; def.mt[4][3]=5; def.mt[4][4]=1;49 def.x=def.y=4;50 51 ans.x=4; ans.y=1;52 ans.mt[1][1]=1; ans.mt[2][1]=5; ans.mt[3][1]=11; ans.mt[4][1]=36;53 return true;54 }55 56 int main()57 {58 while(scanf("%d%d",&n,&m),n)59 {60 if(!prev()) continue;61 else go();62 }63 return 0;64 }

 

 

转载于:https://www.cnblogs.com/proverbs/archive/2012/10/11/2720380.html

你可能感兴趣的文章
C# 串口接收数据中serialPort.close()死锁
查看>>
Python3控制结构与函数
查看>>
字符串方法title()、istitle()
查看>>
yield语句
查看>>
Html.Partial和Html. RenderPartial用法
查看>>
查看linux系统中占用cpu最高的语句
查看>>
[洛谷P1738]洛谷的文件夹
查看>>
ubuntu server设置时区和更新时间
查看>>
《弟子规》下的沉思
查看>>
网络流24题 飞行员配对方案问题
查看>>
剑指offer python版 调整数组顺序使奇数位于偶数前面
查看>>
Leader of All Crushing Machines in the Future
查看>>
设置dataGridView单元格颜色、字体、ToolTip、字体颜色
查看>>
对项目重命名
查看>>
tkinter学习三
查看>>
【京东咚咚架构演进】-- 好文收藏
查看>>
【BZOJ 3155】Preprefix sum(树状数组)
查看>>
【洛谷 2430】严酷的训练
查看>>
中年男人 中年女人 中年人
查看>>
GoFramework框架简介(三)通信机制篇
查看>>