题目传送门 题目大意:计算数列a的第n项,其中: \[a[1] = a[2] = a[3] = 1\] \[a[i] = a[i-3] + a[i - 1]\] \[(n ≤ 2 \times 10^9)\] 一般的递推是O(n)的,显然时间和空间都不能承受. 由于每一步递推都是相同的.这句话包含了2个层面:首先,递推式是相同的:其次,递推的条件也要是相同的.综合来说,每一步的递推都是相同的.这是应用矩阵加速递推的充分条件. 那么怎么进行矩阵加速呢?我们首先观察,第\(i\)项和哪些项有关? 与…
题目大意:用k种字符构建两个长度为n的字符串(每种字符有无限多个),要求对应位置字符相同的连续子串最长长度为m,问方法数. 其中k,n,m是输入,n(1<=n<=1000000000), m(1<=m<=10), k(1<=k<=26). 对题目解释更详细点儿,如下两串 123456 223466 这个的“对应位置字符相同的连续子串最长长度”是3,是字符串“234”. 解题思路,这题一看就是DP或者组合数学,但是不会组合数学,只能DP了dp[i][j]表示前i个字符,最…
题目描述 请编程实现矩阵乘法,并考虑当矩阵规模较大时的优化方法. 思路分析 根据wikipedia上的介绍:两个矩阵的乘法仅当第一个矩阵B的列数和另一个矩阵A的行数相等时才能定义.如A是m×n矩阵和B是n×p矩阵,它们的乘积AB是一个m×p矩阵,它的一个元素其中 1 ≤ i ≤ m, 1 ≤ j ≤ p. 值得一提的是,矩阵乘法满足结合律和分配率,但并不满足交换律,如下图所示的这个例子,两个矩阵交换相乘后,结果变了: 下面咱们来具体解决这个矩阵相乘的问题. 解法一.暴力解法 其实,通过前面的分析…
Code: #include <cstdio> #include <cstring> #include <algorithm> #define setIO(s) freopen(s".in","r",stdin) #define N 60 #define ll long long #define mod p using namespace std; int k,r; long long n,p; struct matrix{ lo…
有一头母牛,它每年年初生一头小母牛.每头小母牛从第四个年头开始,每年年初也生一头小母牛.请编程实现在第n年的时候,共有多少头母牛? Sample Input2450Sample Output246 //本代码为只输入一组数据的答案 //方法1:找规律找出来a[i]=a[i-1]+a[i-3] (ps:我第一次就是这样做出来的) //方法2:归纳出状态转移方程 //现在解释一下为什么a[i] = a[i - 1] + a[i - 3] //假如i-1年到i年每变化,则a[i] = a[i - 1]…
题目链接:传送门 题目大意: 求斐波那契数列第n项F(n). (F(0) = 0, F(1) = 1, 0 ≤ n ≤ 109) 思路: 用矩阵乘法加速递推. 算法竞赛进阶指南的模板: #include <iostream> #include <cstring> using namespace std; ; ], ][]) { ]; memset(c, , sizeof c); ; j < ; j++) { ; k < ; k++) { c[j] = (c[j] + 1…
题目链接: https://www.luogu.org/problemnew/show/P1707 分析: 洛谷的一道原创题,对于练习矩阵加速递推非常不错. 首先我们看一下递推式: \(a[k+2]=p*a[k+1]+q*a[k]+b[k+1]+c[k+1]+r*k^2+t*k+1;\) \(b[k+2]=u*b[k+1]+v*b[k]+a[k+1]+c[k+1]+w^k;\) \(c[k+2]=x*c[k+1]+y*c[k]+a[k+1]+b[k+1]+z^k+k+2;\) 有点吓人,我想在做…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 Farmer John likes to play mathematics games with his N cows. Recently, they are attracted by recursive sequences. In each turn, the cows would stand in a line, while John writes two positive numbers…
题目链接:传送门 描述石头游戏在一个 $n$ 行 $m$ 列 ($1 \le n,m \le 8$) 的网格上进行,每个格子对应一种操作序列,操作序列至多有 $10$ 种,分别用 $0 \sim 9$ 这 $10$ 个数字指明.操作序列是一个长度不超过 $6$ 且循环执行.每秒执行一个字符的字符串.每秒钟,所有格子同时执行各自操作序列里的下一个字符.序列中的每个字符是以下格式之一:数字 $0 \sim 9$:表示拿 $0 \sim 9$ 个石头到该格子.$NWSE$:表示把这个格子内所有的石头推…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2004 求方案数,想到DP: 因为两个站间距离<=p,所以每p个站中所有车一定都会停靠至少一次,借此设计状态为p个站的停靠状态: 状压一下,1表示有车,0表示没有车,每个状态只有k个1: 这样就可以转移了,后一个状态可以是前一个中的一辆车移动了过来,状态数+=前一个状态: 但这样没有规律,同一个状态中不同的1出现的顺序不同,会导致出现重复: 所以需要人为规定一个顺序,这里设计为p位中最后一位…