首页 > 代码库 > 蜜蜂路线——有毒的高精 斐波那契

蜜蜂路线——有毒的高精 斐波那契

题目背景

题目描述

一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房M开始爬到蜂房N,M<N,有多少种爬行路线?

技术分享

输入输出格式

输入格式:

 

输入M,N的值

 

输出格式:

 

爬行有多少种路线

 

输入输出样例

输入样例#1:
1 14
输出样例#1:
377

说明

 

 

无说明!!!

普通的斐波那契??

哦,wa了!

无说明,你知道他到底有几个啊!

那就是用高精啊!

 

 

代码

#include<cmath>#include<cstdio>#include<cstdlib>#include<iostream>#include<algorithm>using namespace std;int f[5001][5001],len[5001];int read(){    int x=0,f=1;    char ch=getchar();    while(ch<0||ch>9)    {        if(ch==-)         f=-1;    }    while(ch>=0&&ch<=9)    {        x=x*10+ch-0;        ch=getchar();    }    return f*x;}void fei(int a,int b,int c){    for(int i=1;i<=max(len[b],len[c]);i++)    {        f[a][i]+=f[b][i]+f[c][i];        if(f[a][i]>9)        {            f[a][i+1]=f[a][i]/10;            f[a][i]%=10;            len[a]=max(len[a],i+1);        }        else len[a]=max(len[a],i);    }}int main(){    int n=read(),m=read();    f[1][1]=1;    f[2][1]=1;    len[0]=1;    len[1]=1;    for(int i=3;i<=m-n+1;i++)    {        fei(i,i-1,i-2);    }    for(int i=len[m-n+1];i>=1;i--)     cout<<f[m-n+1][i];    return 0;}

 

蜜蜂路线——有毒的高精 斐波那契