BISHI131 数楼梯¶
简单通过率 44.09%python3样例通过牛客 AC
一句话
每步走 1 或 2 阶,求走法数 mod 998244353。
解题思路¶
这题考什么¶
最入门的线性 DP。设 f_i 为走到第 i 阶的方案数,最后一步只能是从 i-1 迈 1 阶 或从 i-2 迈 2 阶,两类方案互不重叠且覆盖全部情况:
也就是斐波那契数列(错开一位)。
数据规模与复杂度¶
n <= 1e5,O(n) 递推、O(1) 空间(滚动两个变量)。 n 只有 1e5,用不着矩阵快速幂。
坑在哪¶
- n = 1 要特判(答案 1),否则 f_2 的初值会被误用;
- 每步都取模,不要先算大数最后再取模—— 虽然 Python 的大整数不会溢出,但 1e5 项的斐波那契有约 2 万位, 大整数加法会退化成 O(位数),总复杂度变成 O(n^2 / 64),白白慢几十倍;
- 题目问的是「走到顶端」的方案数,f_n 就是答案,不用再加 1。
参考实现¶
[:octicons-arrow-left-16: BISHI130](BISHI130.md) [BISHI132 :octicons-arrow-right-16:](BISHI132.md)