洛谷P2437 蜜蜂路线 (递推+大数加法)

2024-02-04 23:48

本文主要是介绍洛谷P2437 蜜蜂路线 (递推+大数加法),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

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

输入格式

输入 m,nm,n 的值

输出格式

爬行有多少种路线

输入输出样例

输入 #1

1 14

输出 #1

377

说明/提示

对于100%的数据    1<=M,N≤1000

 

思路:

类似于斐波那契数列的求解,一个状态可能是上一个状态走两步到达的,也可能是上一个状态走一步到达的,可以得到递推公式为DP[i]=DP[i-1]+DP[i-2](和斐波那契数列递推公式一样)。本题求出的是从第n个状态到第m个状态的走法,实际上就是求第m-n+1项斐波那契数列。

易错点:1<=n-m+1<=1000,最大是求斐波那契数列的第1000项,会爆longlong,因此需要使用大数加法。

 

#include<bits/stdc++.h>
using namespace std;
int m,n;
string dp[1100];//大数加法
string ADD(string a,string b)
{string temp;//将字符串反转,便于运算reverse(a.begin(),a.end());reverse(b.begin(),b.end());int t,c=0;//因为b是第i-2项,a是第i-1项,第i-2项一定小于第i-1项,所以b的位数一定小于等于a的位数for(int i = 0;i<b.length();i++){t = a[i]-'0'+b[i]-'0'+c;c=t/10;t%=10;temp+=t+'0';}//如果a的位数大于b的位数,需要加上a多余的位数,加的过程中还需要考虑上一步计算时候的进位for(int i = b.length();i<a.length();i++){int t = a[i]-'0'+c;c = t/10;t%=10;temp+=t+'0';}//最后有进位的话加上进位if(c) temp+=c+'0';reverse(temp.begin(),temp.end());return temp;
}int main()
{cin>>n>>m;;dp[1]="1";dp[2]="1";for(int i = 3;i<=m-n+1;i++){dp[i]=ADD(dp[i-1],dp[i-2]);}cout<<dp[m-n+1]<<endl;return 0;
}

 

这篇关于洛谷P2437 蜜蜂路线 (递推+大数加法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/679161

相关文章

uva 568 Just the Facts(n!打表递推)

题意是求n!的末尾第一个不为0的数字。 不用大数,特别的处理。 代码: #include <stdio.h>const int maxn = 10000 + 1;int f[maxn];int main(){#ifdef LOCALfreopen("in.txt", "r", stdin);#endif // LOCALf[0] = 1;for (int i = 1; i <=

uva 10069 DP + 大数加法

代码: #include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <cl

Java验证辛钦大数定理

本实验通过程序模拟采集大量的样本数据来验证辛钦大数定理。   实验环境: 本实验采用Java语言编程,开发环境为Eclipse,图像生成使用JFreeChart类。   一,验证辛钦大数定理 由辛钦大数定理描述为: 辛钦大数定理(弱大数定理)  设随机变量序列 X1, X2, … 相互独立,服从同一分布,具有数学期望E(Xi) = μ, i = 1, 2, …, 则对于任意正数ε ,

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

HLJUOJ1128 HDU2046(数学递推)

1128: 递推求解专题练习三 Time Limit: 1 Sec   Memory Limit: 128 MB Submit: 8   Solved: 6 [ Submit][ Status][ Web Board] Description 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数。 例如n=3时,为2× 3方格,骨牌的铺放方案有三

高精度加法,乘法,阶乘

#include <iostream>#include <map>#include <string>#include <algorithm>using namespace std;const int Max = 50000;string str1,str2;/***********乘法***********/void chenfa(){cin >> str1>>str2;int a

找第K大数(ACdream 1099)

瑶瑶的第K大 Time Limit: 4000/2000MS (Java/Others)  Memory Limit: 256000/128000KB (Java/Others) Submit  Statistic  Next Problem Problem Description 一天,萌萌的妹子--瑶瑶(tsyao)很无聊,就来找你玩。可是你们都不知道玩什么。。。