Sam 数(矩阵乘法)
来源:互联网 发布:h3c网络工程师证书知乎 编辑:程序博客网 时间:2024/06/11 08:23
Sam 数
Sam 数是指相邻的两位数字相差不超过 2 的数。求长度为 n 的 Sam 数有多少个。输出对 1000000007 取余后的结果。 n <= 10^18 。
分析 :这个数据范围很吓人,所以必须要 O(logn) 的算法。
首先,递推式很明显:
用 f(i, j) 表示第 j 位为 i 时总的个数(先不考虑各种特殊情况),则
f(i, j) = f(i-2, j-1) + f(i-1, j-1) + f(i, j-1) + f(i+1, j-1) + f(i+2, j-1)
我们考虑这样一个矩阵 A :
[ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
这个 1*10 矩阵表示当第一位为 i 且一共只有 1 位时的方案数。
考虑另一个矩阵 B :
这个矩阵的第 i 行 第 j 列 表示当某一位为 j ,相邻一位取 i 时的方案数。
我们将矩阵 A 与 B 相乘一次,可以得到一个 1*10 的矩阵,很明显,这个矩阵的第 i个元素的值表示当第一位为 i 且一共有 2 位时的方案数,那么矩阵的元素和即 n=2 时的结果。
同理,将 A 不断地与 B 相乘,对于 n ,最终得到的矩阵为 A * (B ^ n-1) 的结果,这个矩阵的元素和即最终答案。注意 n=1 的时候特判,这时 0 也算一个方案,所以答案为 10 。
1 0
- Sam 数(矩阵乘法)
- [矩阵乘法]数
- cublas库实现矩阵乘法(任意维数)
- 【codevs1287】矩阵乘法(矩阵乘法)
- 【codevs1287】矩阵乘法(矩阵乘法)
- 矩阵链乘法(最小乘法数) (动态规划算法实现)算法导论p201
- 矩阵乘法(矩阵)【hpu】
- hdu4920(矩阵 乘法)
- 矩阵乘法(一)
- 动态规划 - 之 - 矩阵链式乘法数
- [HAOI2015]数字串拆分(矩阵乘法)
- 逆序数&行列式&矩阵乘法&逆矩阵【线性代数】
- 51nod 1137 矩阵乘法(矩阵快速乘法)
- 51nod 1137 矩阵乘法(矩阵乘法)
- 矩阵 模板(矩阵加减,矩阵乘法,矩阵求逆)
- 【算法】卡特兰数问题(BST排列个数,矩阵乘法,算数加括号,排队等)
- poj3070(矩阵快速幂,矩阵乘法)
- poj 3233 矩阵乘法(分块矩阵)
- BZOJ3926-[Zjoi20150]诸神眷顾的幻想乡
- 多线程
- JDK1.8源码中的编程习惯
- ZOJ 3610 Yet Another Story of Rock-paper-scissors
- axis2开发webservice之编写Axis2模块(Module)
- Sam 数(矩阵乘法)
- curl 中post 传参数给server
- Maperitive Mapnik style rule
- Codeforces Round #352 (Div. 2)-B. Different is Good(模拟)
- Java之properties文件读取
- 3D-Touch
- javascript:js脚本的3中引入方法
- 密码学---非对称密码的加密解密采用公钥还是密钥
- [Swift自学之旅一]Swift的一些基本知识