矩阵快速幂加速递推

Blocks(POJ 3734)矩阵快速幂 http://www.cnblogs.com/pdev/p/4063194.html
常见递推形式二举例
题目原意:N个方块排成一列,每个方块可涂成红、蓝、绿、黄。问
红方块和绿方块都是偶数的方案的个数。
假设已涂完前i个方块时,有:
na[i] = 1~i方块中,红、绿方块数量都是偶数的方案数
nb[i] = 1~i方块中,红、绿方块数量一个是偶数一个是奇数的方案数(红
even绿odd 或 红odd绿even)
nc[i] = 1~i方块中,红、绿方块数量都是奇数的方案数
且有a(0)=1; b(0)=0; c(0)=0
则涂第i+1个格子时,不难推导出:
na[i+1]=2a[i]+b[i]    
nb[i+1]=2
a[i]+2b[i]+2c[i]
nc[i+1]=b[i]+2*c[i]

也就是
在这里插入图片描述

计算A^n
// A^4能通过(A^2)*(A^2)得到,A^8又能通
过(A^4)*(A^4)得到,利用这一特性,大大减
少乘法次数
mat pow(mat A,ll n)
{ mat B;
memset(B.m,0,sizeof(B.m));
for(int i=0;i<3;i++)
{ B.m[i][i]=1; //B初始化为单位矩阵
}
while(n>0) //时间复杂度O(logn)
{
if(n&1) B=mul(B,A);
A=mul(A,A);
n>>=1;
}
return B;
}

就是把幂底数换成了矩阵
顺便熟悉一下矩阵乘法。
n阶层矩阵相乘为O(n^n)复杂度。

对,还有五行问题。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值