题目传送门
话说这道题不就是高精度的斐波那契吗……
和 数楼梯 (洛谷 P1225)有异曲同工之妙……
题目背景
无
题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 m 开始爬到蜂房 n,m<n,有多少种爬行路线?(备注:题面有误,右上角应为 n-1)
输入格式
输入 m,n 的值
输出格式
爬行有多少种路线
输入输出样例
输入 #1复制
1 14
输出 #1复制
377
说明/提示
对于100%的数据,M,N≤1000
#include<bits/stdc++.h>
using namespace std;
int p[1500][1500]; //定义一个二维数组。p[第几个][位数]
int length=1; //答案长度
void f(int a){ //无返回值函数
for(int i=1;i<=length;i++){
p[a][i]=p[a-1][i]+p[a-2][i]; //斐波那契数列递归公式
}
for(int i=1;i<=length;i++){ //高精加
if(p[a][i]>9){
p[a][i+1]+=p[a][i]/10;
p[a][i]%=10;
}
}
if(p[a][length+1]){
length++;
}
}
int main(){
int m,n;
cin>>m>>n;
p[1][1]=1; //将数组前两个数分别设置成1和2
p[2][1]=2;
for(int i=3;i<=n-m;i++){ //从3开始加
f(i);
}
for(int i=length;i>=1;i--){ //输出
cout<<p[n-m][i];
}
return 0;
}