蜜蜂路线
题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 m m m 开始爬到蜂房 n n n, m < n m<n m<n,有多少种爬行路线?(备注:题面有误,右上角应为 n − 1 n-1 n−1)
输入格式
输入 m , n m,n m,n 的值
输出格式
爬行有多少种路线
输入输出样例
输入 #1
1 14
输出 #1
377
提示
对于100%的数据, 1 ≤ M , N ≤ 1000 1 \le M,N\le 1000 1≤M,N≤1000
1.思路解析
跟【题解】——数楼梯差不多。直接放代码。
2.AC代码
#include<bits/stdc++.h>
using namespace std;
struct bigint//定义高精度整形
{
int a[300],len;
bigint(int x=0)
{
memset(a,0,sizeof(a));
if(x==0)
{
len=1;
return;
}
for(len=1;x;len++)
a[len]=x%10,x/=10;
len--;
}
int &operator[](int x)
{
return a[x];
}
void print()
{
for(int i=len;i>=1;i--)
cout<<a[i];
}
void flatten(int L)
{
len=L;
for(int i=1;i<=len;i++)
a[i+1]+=a[i]/10,a[i]%=10;
while(!a[len])
len--;
}
friend bigint operator+(bigint a,bigint b)
{
bigint c;
int _len=max(a.len,b.len);
for(int i=1;i<=_len;i++)
c[i]+=a[i]+b[i];
c.flatten(_len+1);
return c;
}
};
int main()
{
int m,n;
bigint f[1010];//f[i]代表到达第i个蜂房的爬行路线种数
cin>>m>>n;
f[m]=f[m+1]=bigint(1);//递推初始化
for(int i=m+2;i<=n;i++)//从第m+2个枚举
f[i]=f[i-1]+f[i-2];//递推式:f[i]=f[i-1]+f[i-2]
f[n].print();
return 0;
}
喜欢就订阅此专辑吧!
【蓝胖子编程教育简介】
蓝胖子编程教育,是一家面向青少年的编程教育平台。平台为全国青少年提供最专业的编程教育服务,包括提供最新最详细的编程相关资讯、最专业的竞赛指导、最合理的课程规划等。本平台利用趣味性和互动性强的教学方式,旨在激发孩子们对编程的兴趣,培养他们的逻辑思维能力和创造力,让孩子们在轻松愉快的氛围中掌握编程知识,为未来科技人才的培养奠定坚实基础。
欢迎扫码关注蓝胖子编程教育