原理

一组DP状态,其实等价于一个向量。而DP状态的转移方程,可以是对一个向量做变形的矩阵。那么本质上从1个向量到另一个状态的向量,是可以通过一个矩阵来做到。矩阵具有结合律,我们可以先对右半部分矩阵用快速幂得到一个终极的变形矩阵,再乘以向量,就可以把O(N)O(N)O(N)的计算 优化到 O(log(N))O (log(N))O(log(N))


示例

以大家最熟悉的斐波那契数列为例:

递推公式为 dp[i]=dp[i−1]+dp[i−2]dp[i] = dp[i-1] + dp[i - 2]dp[i]=dp[i−1]+dp[i−2],那么每一个新的数的计算依赖于前2个数,所以可以构建这么一个向量为 (dp[n−1],dp[n−2])(dp[n-1], dp[n-2])(dp[n−1],dp[n−2]),那么它和递推的下一组(dp[n],dp[n−1])(dp[n], dp[n-1])(dp[n],dp[n−1])有什么关系呢?

  • dp[n]=dp[n−1]∗1+dp[n−2]∗1dp[n] = dp[n-1] *1+ dp[n - 2]*1dp[n]=dp[n−1]∗1+dp[n−2]∗1
  • dp[n−1]=dp[n−1]∗1=dp[n−1]∗1+dp[n−2]∗0dp[n-1] = dp[n-1]*1=dp[n-1] *1+ dp[n - 2]*0dp[n−1]=dp[n−1]∗1=dp[n−1]∗1+dp[n−2]∗0

转换为矩阵形式,显而易见:
依次递推,要从 dp[2],dp[1]dp[2], dp[1]dp[2],dp[1]求到 dp[n],dp[n−1]dp[n], dp[n-1]dp[n],dp[n−1] 中间需要有n-2个同样的变形矩阵的乘法


(此处若n比较大,则需要结合矩阵快速幂优化)

 传送门:矩阵快速幂优化

注:
本文部分引自西部小笼包https://www.jianshu.com/p/9817cf3c2fd9

根据线性递推的DP公式如何写出变换矩阵相关推荐

  1. HDU 5863 cjj's string game ( 16年多校10 G 题、矩阵快速幂优化线性递推DP )

    题目链接 题意 : 有种不同的字符,每种字符有无限个,要求用这k种字符构造两个长度为n的字符串a和b,使得a串和b串的最长公共部分长度恰为m,问方案数 分析 : 直觉是DP 不过当时看到 n 很大.但 ...

  2. 【THUSC 2017】如果奇迹有颜色【polya引理】【矩阵】【计数dp】【BM打表+线性递推】

    题意:长度为 nnn 的环染 mmm 种颜色,要求任意相邻 mmm 个元素不能包含全部的颜色.求方案数 模 109+710^9+7109+7,循环同构. n≤109,m≤7n\leq 10^9,m\l ...

  3. BM求线性递推模板(杜教版)

    BM求线性递推模板(杜教版) BM求线性递推是最近了解到的一个黑科技 如果一个数列.其能够通过线性递推而来 例如使用矩阵快速幂优化的 DP 大概都可以丢进去 则使用 BM 即可得到任意 N 项的数列元 ...

  4. CCF201809-5线性递推式

    试题编号: 201809-5 试题名称: 线性递推式 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 样例输入 3 3 6 2 0 4 样例输出 12 32 80 208 样例说明 样例 ...

  5. Codeforces 1106F Lunar New Year and a Recursive Sequence (数学、线性代数、线性递推、数论、BSGS、扩展欧几里得算法)...

    Codeforces 1106F Lunar New Year and a Recursive Sequence (数学.线性代数.线性递推.数论.BSGS.扩展欧几里得算法) 哎呀大水题..我写了一 ...

  6. [线性代数学习笔记] 线性递推数列及 Berlekamp-Massey 算法的详细推导过程

    线性递推数列 线性递推 对于无限数列 {a0,a1,...}\{a_0,a_1,...\}{a0​,a1​,...} 和有限非空数列 {r0,r1,...,rm−1}\{r_{0},r_1,...,r ...

  7. 【模板】BM + CH(线性递推式的求解,常系数齐次线性递推)

    这里所有的内容都将有关于一个线性递推: $f_{n} = \sum\limits_{i = 1}^{k} a_{i} * f_{n - i}$,其中$f_{0}, f_{1}, ... , f_{k ...

  8. 特征方程求数列的通项公式(二阶线性递推式)

    特征方程求数列的通项公式(二阶线性递推式) 已知数列{an}\{a_n\}{an​}满足fn=afn−1+bfn−2,a,b∈N,b≠0,n>2,f1=c1,f2=c2,(c1,c2f_n=af ...

  9. 组合数学——特征方程与线性递推方程

    组合数学--特征方程与线性递推方程 大多数计数问题都可以表示成线性的递推关系,而特征方程是解决这些线性递推关系的有利工具. 一个度为 kkk 的 线性齐次常系数递推方程 指的是具有如下形式的方程: a ...

最新文章

  1. 2008年 浙工大考研计算机专业课试题C++
  2. stm8s串口奇偶校验学习笔记
  3. irq domain介绍和代码导读
  4. oss图片数据转图片二进制数据_图片数据不够快来试试这些数据增强
  5. 在jenkins上配置Android项目(git管理,gradle构建)
  6. mysql的远程帐号密码_MySQL设置远程客户端访问权限和修改账户密码
  7. RabbitMQ快速安装配置指南
  8. 35--用两个栈实现队列
  9. 服务器第二代型号,SK Hynix公开第二代服务器用SSD
  10. sql join 示例_SQL CROSS JOIN与示例
  11. debian的中国镜像
  12. springboot 解决 NoClassDefFoundError: redis/clients/jedis/util/SafeEncoder
  13. [截稿日期] 人机交互与普适计算方向的A、B类国际会议
  14. 高德地图覆盖自定义瓦片图
  15. 2022年湖北省光电子信息和生命健康领域科技计划成果路演征集条件以及申报时间流程汇总!
  16. 什么叫计算机网络虫洞,虫洞:危险与希望并存
  17. 分享过几个【贪吃蛇】了,再分享一下也不过分吧?(妙趣横生)
  18. 基于SPringBoot的玩具销售商城管理系统
  19. Ophir Vega激光功率计
  20. 【物联网】14.物联网设备控制器选择 - 单片机(MCU)

热门文章

  1. [Buzz Today]2012.09.01
  2. 好玩的问答,看看你的年龄阶段哦
  3. 地图结合资料 提供全新网络服务
  4. 逻辑斯蒂回归java_机器学习 (五)逻辑斯蒂回归
  5. Windows Server 2008 R2 Tomcat 开机自启动
  6. cross apply
  7. struts2中的constant配置详解
  8. Python爬虫实战---抓取图书馆借阅信息
  9. ajax post请求发送数组后台接收
  10. (九)Hibernate 检索策略