1 条题解
-
0
题目大意
定义一种完美平衡树:
权值为 的树是单节点树
权值为 的树有 棵完全相同的子树 ()
每棵子树的权值为
给定 ,求权值为 的完美平衡树的数量。
算法思路
核心思想
记忆化搜索 + 整除分块。
设 表示权值为 的完美平衡树的数量。
状态转移 对于 ,枚举子树个数 ,则每棵子树权值为 :

优化技巧
- 整除分块
注意到 的值在连续区间内相同,可以分段计算:
对于 ,如果
则这段的贡献为
- 记忆化搜索
小范围 () 用数组存储
大范围用 map 存储
基础情况:
算法流程
读入
调用 get(N) 计算答案:
如果 ,返回
如果已计算过,直接返回结果
否则使用整除分块枚举所有可能的
累加贡献并存储结果
输出答案
复杂度分析
时间复杂度:(整除分块 + 记忆化的复杂度)
空间复杂度:(存储状态数)
总结
本题是数论与动态规划的结合:
递归定义:利用树的递归定义设计状态转移
整除分块:关键优化,将 枚举降为 段
记忆化搜索:避免重复计算,处理 的大数据
这种"整除分块 + 记忆化"的技巧可以推广到其他涉及 求和的计数问题,体现了数论优化在组合计数中的重要作用。
- 1
信息
- ID
- 4682
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者