洛谷题解P2437蜜蜂路线(C++,高精度,递推)

话不多说 这题在递推与递归栏里,所有这题能用到递推或递归,打开题一看,这是一道递推题

题目:一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 mm 开始爬到蜂房 nn,m<nm<n,有多少种爬行路线?(备注:题面有误,右上角应为 n-1n−1)

输入格式

输入 m,nm,n 的值

输出格式

爬行有多少种路线

输入输出样例

输入 

1 14

输出 

377

说明/提示

对于100%的数据,M,N\le 1000M,N≤1000

 

  第一次我没看到数据范围,以为一个longlong就可以带走她,没想到还是我太年轻。,这题是递推,除了前两个点,其余每一个点的到达次数都可以由前面两个点的到达次相加,所有可以创造一个全局变量二维数组a【1002】【1002】;和默认长度1;

输入起始位置m和终止位置n,所有走过的路程为n-m+1个点,先初始化a[1][0]=1;(默认a[0][0]=1,但是其实没有必要写) ,a[2][0]=2;其余每个点的次数都有前面两个决定,

eg:

第temp个点,a[temp][]=a[temp-1][]+a[temp-2][];(这个代码肯定是不规范的,但是为了让你们理解这个意思)对了,由于数据范围,这里需要高精度,不说了,直接上代码。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int a[1002][1002];//定义二维数组
int len = 1//默认长度为1

void fun(int temp)
{
	for (int i = 0; i <= len - 1; i++)
	{
		a[temp][i] += a[temp - 1][i] + a[temp - 2][i];//一定要注意是+=,而不是等于
		if (a[temp][i] >= 10)
		{
			a[temp][i + 1] += a[temp][i] / 10;
			a[temp][i] %= 10;
		}
	}
	if (a[temp][len])len++;//进位

}

int main()
{
	int m, n;
	cin >> m >> n;
	a[1][0] = 1;
	a[2][0] = 2;//默认初始值第二个和第三个点
	for (int i = 3; i <= n-m; i++)
	{
		fun(i);
	}
	//cout << a[n - m][0] << endl;
	for (int i = len-1; i>=0; i--)//逆序输出
	{
		cout << a[n - m][i];
	}
	cout << endl;
	return 0;
}

写题解不易,点个赞再走吧!!!!!!!!!!!!!!

  • 14
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值