1 条题解
-
0
题解
思路
令 表示最长合法括号子序列至多含 对括号的序列数。答案为 。
子任务 1
枚举长度 的所有二进制串,只保留左括号数为 的序列。扫描序列并贪心匹配括号即可得到最长合法括号子序列。复杂度为 。
子任务 2
当 时所有排列都合法,。否则按首字符分类:首字符为右括号时得到 ;首字符为左括号时它必能贡献一对匹配,得到 。因此
记忆化递归即可。
子任务 3
上述递推与 Pascal 恒等式相同,可以归纳得到
因此当 时答案为
否则为零。预处理到 的阶乘和逆阶乘后每组 。
做法
预处理阶乘与逆阶乘。逐组检查 ,若成立输出零;否则计算两个组合数之差并调整到模数范围。
正确性证明
递推按第一个字符划分了全部序列且两类不交。边界 时最长子序列不可能超过较少的括号数,故所有排列都满足。由相同边界和相同 Pascal 递推,。相邻“至多”计数之差恰好留下最长子序列为 对的序列,因此公式正确。
复杂度
满分算法预处理 ,每组 ,空间 ;中档最坏 ;小档为指数复杂度。
- 1
信息
- ID
- 1436
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者