蜜蜂路线
题目背景
无
题目描述
一只蜜蜂在下图所示的数字蜂房上爬动,已知它只能从标号小的蜂房爬到标号大的相邻蜂房,现在问你:蜜蜂从蜂房 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
1 14
样例输出 #1
377
提示
对于100%的数据, 1 ≤ M , N ≤ 1000 1 \le M,N\le 1000 1≤M,N≤1000
问题链接: P1072 Hankson 的趣味题
问题分析: 递推问题,需要用到大数计算。
参考链接: HDU2044 一只小蜜蜂…【递推】
题记: (略)
AC的C++语言程序如下:
/* P2437 蜜蜂路线 */
#include <iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
typedef unsigned long long ULL;
const int N = 1000;
int f[N + 1][500];
void fib(int n)
{
if (n == 0 || n == 1) cout << '0';
else if (n == 2) cout << '1';
else if (n == 3) cout << '2';
else {
memset(f, 0, sizeof f);
f[2][0] = 1, f[3][0] = 2;
int len = 1;
for (int i = 4; i <= n; i++) {
int carry = 0;
for (int j = 0; j < len; j++) {
f[i][j] = f[i - 2][j] + f[i - 1][j] + carry;
carry = f[i][j] / 10;
f[i][j] %= 10;
}
if (carry) f[i][len++] = carry;
}
for (int i = len - 1; i >= 0; i--)
cout << f[n][i];
}
}
int main()
{
int n, m;
cin >> n >> m;
fib(abs(m - n) + 1);
return 0;
}
参考的C++语言程序(没用大数AC不了)如下:
/* P2437 蜜蜂路线 */
#include <iostream>
#include <cstdlib>
using namespace std;
typedef unsigned long long ULL;
const int N = 1000;
ULL f[N + 1];
void setf()
{
f[0] = 0, f[1] = 0, f[2] = 1, f[3] = 2;
for (int i = 4; i <= N; i++)
f[i] = f[i - 2] + f[i - 1];
}
int main()
{
setf();
int n, m;
cin >> n >> m;
cout << f[abs(m - n) + 1];
return 0;
}
标签:蜂房,大数,int,蜜蜂,carry,include,递推,P2437,1000
From: https://blog.csdn.net/tigerisland45/article/details/140727785