洛谷题单指南-递推与递归-P2437 蜜蜂路线

原题链接:https://www.luogu.com.cn/problem/P2437

题意解读:根据题目要求,只能从标号小的蜂房爬到标号大的相邻蜂房,即每次要么爬到+1的蜂房,要么爬到+2的蜂房,本质上是一个斐波那契数列问题,和数楼梯问题一样。

解题思路:

要求从m号蜂房到n号蜂房的路径,即走n-m级楼梯的方案,n最大1000,同样需要用高精度来处理,代码和P1255基本一致。

100分代码:

#include <bits/stdc++.h>
using namespace std;

const int N = 1005;

int f[N][500]; //每行存一个高精度整数,每行第一个数代表这一行数的长度
int m, n;

int main()
{
    cin >> m >> n;

    f[0][0] = 1, f[0][1] = 1; //初始化第一行
    f[1][0] = 1, f[1][1] = 1; //初始化第二行
    
    for(int i = 2; i <= n; i++)
    {
        //高精度加法,计算法斐波那契数列
        for(int j = 1; j <= max(f[i - 1][0], f[i - 2][0]); j++)
        {
            f[i][j] += f[i - 1][j] + f[i - 2][j];
            f[i][j + 1] += f[i][j] / 10; 
            f[i][j] = f[i][j] % 10;

            f[i][0] = j;  //更新长度
            if(f[i][j + 1]) f[i][0] = j + 1; //如果有进位,再次更新长度
        }   
    }
    
    //输出结果,从m到n的路线,即从0到n-m的路线,对应斐波那契数列f[n - m]
   for(int i = f[n - m][0]; i >= 1; i--) cout << f[n - m][i];

    return 0;
}

 

posted @ 2024-02-18 11:51  五月江城  阅读(186)  评论(0编辑  收藏  举报