高精度的斐波那契数列,准备一个二维数组,处理进位。
题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 m 开始爬到蜂房 n,m<n,有多少种爬行路线?(备注:题面有误,右上角应为n−1)
输入格式
输入 m,n 的值
输出格式
爬行有多少种路线
输入输出样例
输入 #1复制
1 14输出 #1复制
377说明/提示
对于100%的数据,1≤M,N≤1000
#include<bits/stdc++.h>
using namespace std;
int dp[1000][1000]={0};
int L=1;
void fun(int m,int n){
if(n==1){
dp[n][1]=1;
return ;
}
if(n==2){
dp[n][1]=2;
return ;
}
for(int i=3;i<=n-m;i++){
for(int j=1;j<=L;j++){
dp[i][j]=dp[i-1][j]+dp[i-2][j];
}
for(int j=1;j<=L;j++){
if(dp[i][j]>=10){
dp[i][j+1]+=dp[i][j]/10;
dp[i][j]%=10;
if(dp[i][L+1]) L++;
// L++;
}
}
}
return ;
}
int main()
{
int m,n;
cin>>m>>n;
dp[1][1]=1;
dp[2][1]=2;
fun(m,n);
for(int i=L;i>=1;i--){
cout<<dp[n-m][i];
}
return 0;
}