1 条题解
-
0
题解:礼物数列快速计算
问题转化
设第 个朋友送的礼物数为 ,根据题意有:
$$a_{n+1} = \sum_{i=1}^{n} a_i + (n+1)^K \quad (n \ge 1) $$关键推导
1. 简化递推
令 ,则 ,且 。
代入得:
2. 建立矩阵递推
设状态向量为:
$$X_n = \begin{bmatrix} S_n \\ n^K \\ n^{K-1} \\ \vdots \\ n^1 \\ 1 \end{bmatrix} $$需要将 递推到 。
多项式降幂关系
对于 有:
其中 。
的递推
$$S_{n+1} = 2S_n + (n+1)^K = 2S_n + \sum_{j=0}^{K} C(K,j) n^j $$构造转移矩阵
矩阵大小:。
第一行对应 :
- 的系数:
- 的系数:(其中 )
第 行()对应 : 设 ,则:
因此该行在 列上的系数为 ,其余为 。
3. 矩阵形式
设 为转移矩阵:
具体形式:
$$M = \begin{bmatrix} 2 & C(K,K) & C(K,K-1) & \cdots & C(K,0) \\ 0 & C(K,K) & C(K,K-1) & \cdots & C(K,0) \\ 0 & 0 & C(K-1,K-1) & \cdots & C(K-1,0) \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 0 & 0 & 0 & \cdots & C(0,0) \end{bmatrix} $$更准确地说: , 对于 , 对于 , 当 ,否则为 。
4. 求
因为 ,且 。
初始 : , 。
所以:
计算 ,取第一个分量得 , 计算 ,取第一个分量得 , 则 。
5. 边界情况
时直接输出 。
6. 实现细节
- 模数
- 矩阵大小 ,矩阵乘法
- 用快速幂计算 ,复杂度
- 组合数预处理到 即可
算法步骤
- 读入
- 若 输出
- 预处理组合数 模
- 构造 转移矩阵
- 计算 (全 向量)
- 计算 ,(当 )
- 计算 ,
- 输出
复杂度分析
- 时间复杂度:,完全满足
- 空间复杂度:
- 1
信息
- ID
- 6062
- 时间
- 1400ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者