题解
2026-04-12 09:35:35
发布于:浙江
0阅读
0回复
0点赞
🐝 问题本质分析
这道题的核心是斐波那契数列的变形应用。我们可以用递推的思路拆解问题:
设 f(n) 表示从蜂房1爬到蜂房n的路线数
观察蜂房结构可以发现:要到达蜂房n,最后一步只能从蜂房n-1或蜂房n-2爬过来
因此递推公式为:f(n) = f(n-1) + f(n-2)
初始条件:f(1)=1(起点就是1,只有1种方式),f(2)=1(从1到2只有1条路)
📝 针对a到b的转化
题目要求从a爬到b,相当于计算从1爬到b-a+1的路线数。比如:
从3到6,间隔为6-3=3,对应计算f(4)(因为3到4是第1步,3到5是第2步,3到6是第3步,对应f(3+1)=f(4))
代入递推公式:f(3)=f(2)+f(1)=2,f(4)=f(3)+f(2)=3,和样例结果一致
💻 代码实现(C++版本)
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<long long> f(51, 0);
f[1] = 1;
f[2] = 1;
for (int i = 3; i <= 50; i++) {
f[i] = f[i-1] + f[i-2];
}
int N;
cin >> N;
while (N--) {
int a, b;
cin >> a >> b;
int n = b - a + 1;
cout << f[n] << endl;
}
return 0;
}
🎯 关键注意事项
数据范围:当b-a达到49时,结果会超过int的范围(约2e9),所以需要用long long类型存储
预计算优化:先把所有可能的结果算好存起来,每次查询直接输出,时间复杂度O(1)
递推边界:一定要注意初始条件的正确性,这是递推类问题的核心
这里空空如也




有帮助,赞一个