题目大意

给定长度为l的只有f,m两种字母 的序列,问不出现fff,fmf的序列个数有多少个

每次的下一个状态都与前一次状态的后两个字母有关

比如我令mm : 0 , mf : 1 , fm : 2 , ff : 3;

那么dp[i][j] 表示长度为i的序列最后由j状态结尾的总个数,当然 j 要大于2

dp[i][0] = dp[i-1][0] + dp[i-1][2]

dp[i][1] = dp[i-1][0]

dp[i][2] = dp[i-1][1] + dp[i-1][3]

dp[i][3] = dp[i-1][1]

根据这个递推关系,我们就能很容易地用动态规划解这道题目,然后就发现超时了 。。。

换个角度把dp值当作矩阵看 (dp[i][0] ,  dp[i][1] , dp[i][2] , dp[i][3]) = {{1 , 1 , 0 , 0} , {0 , 0 , 1, 1} , {1 , 0 , 0 ,0} , {0 , 0 ,1 , 0}} *(dp[i-1][0] ,  dp[i-1][1] , dp[i-1][2] , dp[i-1][3])

然后连续乘法上进行优化

while(n){

  if(n & 1) ~

  ~

  n>>=1

}

 #include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int l , M; struct Matrix{
int m[][];
Matrix operator*(const Matrix &p)const {
Matrix tmp;
for(int i = ; i < ; i++)
for(int j = ; j< ; j++){
tmp.m[i][j] = ;
for(int k = ; k< ; k++){
tmp.m[i][j] += m[i][k] * p.m[k][j];
tmp.m[i][j] %= M;
}
}
return tmp;
}
void show(){
for(int i = ; i< ; i++){
for(int j = ; j< ; j++){
printf("%d " , m[i][j]);
}
puts("");
}
}
}; Matrix pow(Matrix a , int n)
{
Matrix tmp;
memset(tmp.m , , sizeof(tmp.m));
//建立一个单位矩阵
for(int i = ; i< ; i++)
tmp.m[i][i] = ; while(n){
if(n & ) tmp = tmp*a;
a = a * a;
n >>= ;
}
return tmp;
} int main()
{
while(~scanf("%d%d" , &l , &M)){
if(l == ) puts("");
else if(l == ) printf("%d\n" , %M);
else{
Matrix a;
a.m[][] = , a.m[][] = , a.m[][] = , a.m[][] = ;
a.m[][] = , a.m[][] = , a.m[][] = , a.m[][] = ;
a.m[][] = , a.m[][] = , a.m[][] = , a.m[][] = ;
a.m[][] = , a.m[][] = , a.m[][] = , a.m[][] = ; Matrix t = pow(a , l-); int ans = ;
int b[] = { , , , };
for(int i = ; i< ; i++)
for(int j = ; j< ; j++){
ans += b[j] * t.m[j][i];
}
printf("%d\n" , ans % M);
}
}
return ;
}

HDU 2604 矩阵快速幂的更多相关文章

  1. hdu 2604 矩阵快速幂模板题

    /* 矩阵快速幂: 第n个人如果是m,有f(n-1)种合法结果 第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm 对于ffm第n-3个人只能是m那么有f( ...

  2. HDU - 2604 矩阵快速幂 字符串递推 两种解法

    记dp[i]为长度i且符合题意的方案数,dp[n]就是解 符合方案的是不含fmf和fff子串的字符串 考虑如何从前面几项递推出后面第i项 (★表示存在生成的非法方案)←其实没啥用处 i=1时 m③ f ...

  3. HDU 2855 (矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...

  4. HDU 4471 矩阵快速幂 Homework

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...

  5. HDU - 1575——矩阵快速幂问题

    HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973.  Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...

  6. hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...

  7. 随手练——HDU 5015 矩阵快速幂

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...

  8. HDU 3802 矩阵快速幂 化简递推式子 加一点点二次剩余知识

    求$G(a,b,n,p) = (a^{\frac {p-1}{2}}+1)(b^{\frac{p-1}{2}}+1)[(\sqrt{a} + \sqrt{b})^{2F_n} + (\sqrt{a} ...

  9. How many ways?? HDU - 2157 矩阵快速幂

    题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...

随机推荐

  1. js最全的十种跨域解决方案

    在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问 ...

  2. bzoj 3534: [Sdoi2014]重建【矩阵树定理】

    啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...

  3. less新手入门(四)—— Mixin Guards

    八.Mixin Guards 有条件的 mixin 当您想要匹配表达式时,相对于简单的值或特性,Guards是有用的.如果您熟悉函数式编程,您可能已经遇到过它们. 为了尽可能地保持CSS的声明性质,在 ...

  4. ROS-URDF仿真

    前言:URDF (标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.首先做一个带有四个轮子的机器人底座. 1.1 新建urdf文件 在chapter4_t ...

  5. 【SPOJ-GCDEX】GCD Extreme(欧拉函数)

    题目: SPOJ-GCDEX (洛谷 Remote Judge) 分析: 求: \[\sum_{i=1}^{n}\sum_{j=i+1}^{n}gcd(i,j)\] 这道题给同届新生讲过,由于种种原因 ...

  6. 51nod1381 硬币游戏

    1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平 ...

  7. Ajax动态加载数据

    前言: 1.这个随笔实现了一个Ajax动态加载的例子. 2.使用.net 的MVC框架实现. 3.这个例子重点在前后台交互,其它略写. 开始: 1.控制器ActionResult代码(用于显示页面) ...

  8. Java多线程——线程之间的同步

    Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,如何使用volatile关键字,如何使用synchronized修饰的同步代码块和同步方法解决线程安全问题. 部分内容来自以 ...

  9. js操作元素透明度以及浏览器兼容性

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  10. python __slots__ 详解(上篇)

    转自:http://blog.csdn.net/sxingming/article/details/52892640 python中的new-style class要求继承Python中的一个内建类型 ...