题目概述:
# 蜜蜂路线
## 题目背景
无
## 题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 $m$ 开始爬到蜂房 $n$,$m<n$,有多少种爬行路线?(备注:题面有误,右上角应为 $n-1$)
![](https://cdn.luogu.com.cn/upload/pic/1575.png)
## 输入格式
输入 $m,n$ 的值
## 输出格式
爬行有多少种路线
## 样例 #1
### 样例输入 #1
```
1 14
```
### 样例输出 #1
```
377
```
## 提示
对于100%的数据,$1 \le M,N\le 1000$
题目分析:
蜜蜂要想走到i号蜂房,那么他可以从i-1号蜂房走一步,或从i-2号蜂房走两步,用f[i]表示走到i号的放案数,则f[i]=f[i-1]+f[i-2],易看出本题需要使用斐波那契数列,并且需要使用高精度。
完整代码如下:
#include <cstdio>
using namespace std;
int n,m,len=1;
int f[1005][1005];
void plus(int x){
for(int i=1;i<=len;i++)
f[x][i]=f[x-1][i]+f[x-2][i];
for(int i=1;i<=len;i++)
if(f[x][i]>9){
f[x][i+1]+=f[x][i]/10;
f[x][i]%=10;
}
if(f[x][len+1]) len++;
}
int main (){
scanf("%d%d",&m,&n);
f[1][1]=1,f[2][1]=2;
for(int i=3;i<=n-m;i++) plus(i);
for(int i=len;i;i--) printf("%d",f[n-m][i]);
return 0;
}