HDU 2604 矩阵快速幂
题目大意
给定长度为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 矩阵快速幂的更多相关文章
- hdu 2604 矩阵快速幂模板题
/* 矩阵快速幂: 第n个人如果是m,有f(n-1)种合法结果 第n个人如果是f,对于第n-1和n-2个人有四种ff,fm,mf,mm其中合法的只有fm和mm 对于ffm第n-3个人只能是m那么有f( ...
- HDU - 2604 矩阵快速幂 字符串递推 两种解法
记dp[i]为长度i且符合题意的方案数,dp[n]就是解 符合方案的是不含fmf和fff子串的字符串 考虑如何从前面几项递推出后面第i项 (★表示存在生成的非法方案)←其实没啥用处 i=1时 m③ f ...
- HDU 2855 (矩阵快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2855 题目大意:求$S(n)=\sum_{k=0}^{n}C_{n}^{k}Fibonacci(k)$ ...
- HDU 4471 矩阵快速幂 Homework
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4471 解题思路,矩阵快速幂····特殊点特殊处理····· 令h为计算某个数最多须知前h个数,于是写 ...
- HDU - 1575——矩阵快速幂问题
HDU - 1575 题目: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. Input数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n( ...
- hdu 1757 (矩阵快速幂) 一个简单的问题 一个简单的开始
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1757 题意不难理解,当x小于10的时候,数列f(x)=x,当x大于等于10的时候f(x) = a0 * ...
- 随手练——HDU 5015 矩阵快速幂
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5015 看到这个限时,我就知道这题不简单~~矩阵快速幂,找递推关系 我们假设第一列为: 23 a1 a2 ...
- 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} ...
- How many ways?? HDU - 2157 矩阵快速幂
题目描述 春天到了, HDU校园里开满了花, 姹紫嫣红, 非常美丽. 葱头是个爱花的人, 看着校花校草竞相开放, 漫步校园, 心情也变得舒畅. 为了多看看这迷人的校园, 葱头决定, 每次上课都走不同的 ...
随机推荐
- js最全的十种跨域解决方案
在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问 ...
- bzoj 3534: [Sdoi2014]重建【矩阵树定理】
啊啊啊无脑背过果然不可取 比如这道题就不会写 参考:https://blog.csdn.net/iamzky/article/details/41317333 #include<iostream ...
- less新手入门(四)—— Mixin Guards
八.Mixin Guards 有条件的 mixin 当您想要匹配表达式时,相对于简单的值或特性,Guards是有用的.如果您熟悉函数式编程,您可能已经遇到过它们. 为了尽可能地保持CSS的声明性质,在 ...
- ROS-URDF仿真
前言:URDF (标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.首先做一个带有四个轮子的机器人底座. 1.1 新建urdf文件 在chapter4_t ...
- 【SPOJ-GCDEX】GCD Extreme(欧拉函数)
题目: SPOJ-GCDEX (洛谷 Remote Judge) 分析: 求: \[\sum_{i=1}^{n}\sum_{j=i+1}^{n}gcd(i,j)\] 这道题给同届新生讲过,由于种种原因 ...
- 51nod1381 硬币游戏
1381 硬币游戏 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 收藏 关注 有一个简单但是很有趣的游戏.在这个游戏中有一个硬币还有一张桌子,这张桌子上有很多平 ...
- Ajax动态加载数据
前言: 1.这个随笔实现了一个Ajax动态加载的例子. 2.使用.net 的MVC框架实现. 3.这个例子重点在前后台交互,其它略写. 开始: 1.控制器ActionResult代码(用于显示页面) ...
- Java多线程——线程之间的同步
Java多线程——线程之间的同步 摘要:本文主要学习多线程之间是如何同步的,如何使用volatile关键字,如何使用synchronized修饰的同步代码块和同步方法解决线程安全问题. 部分内容来自以 ...
- js操作元素透明度以及浏览器兼容性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- python __slots__ 详解(上篇)
转自:http://blog.csdn.net/sxingming/article/details/52892640 python中的new-style class要求继承Python中的一个内建类型 ...