【洛谷 P2437】蜜蜂路线 题解(递归+记忆化搜索+高精度)

简介: 蜜蜂路线问题:蜜蜂从蜂房$m$到$n$($m<n$)按数字递增爬行。给定$m$和$n$,求路线数。示例:$m=1$,$n=14$,输出$377$。100%数据$1\leq m,n\leq1000$。使用斐波那契序列优化,高精度处理大数。代码实现斐波那契存储并动态规划求解。

蜜蜂路线

题目描述

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

输入格式

输入 $m,n$ 的值

输出格式

爬行有多少种路线

样例 #1

样例输入 #1

1 14

样例输出 #1

377

提示

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

思路

f(x) = f(x - 1) + f(x - 2)
如果m == x或m + 1 == x,则f(x) = 1
数据过大,long long不够大,必须上高精度。

AC代码

#include <iostream>
#include <vector>
#define AUTHOR "HEX9CF"
using namespace std;

const int maxn = 1005;

int n, m;
vector<int> mem[maxn];

vector<int> add(vector<int> v1, vector<int> v2) {
   
   
    vector<int> v3;
    vector<int>::iterator it1 = v1.begin();
    vector<int>::iterator it2 = v2.begin();
    for(; it1 != v1.end() && it2 != v2.end(); it1++, it2++) {
   
   
        int sum = *it1 + *it2;
        v3.push_back(sum);
    }
    for(; it1 != v1.end(); it1++) {
   
   
        v3.push_back(*it1);
    }
    for(; it2 != v2.end(); it2++) {
   
   
        v3.push_back(*it2);
    }
    vector<int>::iterator it3 = v3.begin();
    bool flg = false;
    for(; it3 != v3.end(); it3++) {
   
   
        if(*it3 > 9) {
   
   
            *it3 -= 10;
            if(it3 + 1 == v3.end()) {
   
   
                flg = true;
            } else {
   
   
                *(it3 + 1) += 1;
            }
        }
    }
    if(flg) {
   
   
        v3.push_back(1);
    }
    return v3;
}

void printv(vector<int> v) {
   
   
    vector<int>::reverse_iterator rit = v.rbegin();
    for(; rit != v.rend(); rit++) {
   
   
        cout << *rit;
    }
    cout << endl;
}

void f(int x) {
   
   
    if(!mem[x].empty()) {
   
   
        return;
    }
    if(m == x || m + 1 == x) {
   
   
        mem[x].push_back(1);
        return;
    }
    f(x - 1);
    f(x - 2);
    mem[x] = add(mem[x - 1], mem[x - 2]);
}

int main() {
   
   
    cin >> m >> n;
    f(n);
    printv(mem[n]);
    return 0;
}
目录
相关文章
|
数据安全/隐私保护
【洛谷 P1928】外星密码 题解(递归+字符串)
外星密码挑战涉及解压缩由重复子串压缩的字符串,如`[3FUN]`代表`FUNFUNFUN`。输入是一行压缩过的字符串,输出是解压缩的结果。代码使用递归方法,遇到`[`读取重复次数并解压下一层,遇到`]`返回当前层结果,否则直接添加字符。样例输入`AC[3FUN]`输出`ACFUNFUNFUN`。处理的数据限制为解压后长度在20000内,最多十重压缩。
375 0
|
11月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
7月前
|
数据安全/隐私保护 Android开发 Windows
2025 年三款免费高清无水印视频录制工具推荐合集
本文介绍了三款免费高清录屏软件:EVCapture、Bandicam 和 屏幕录像机(oCam)。EVCapture 功能强大,支持视频录制与直播,提供分屏录制、实时按键显示等;Bandicam 适合游戏录屏,可自定义录制区域并添加Logo,还支持音频和摄像头设置;oCam 小巧灵活,支持多种视频格式(如GIF、MP4等)及音频、截图功能。三者均无水印,画质清晰,满足不同录屏需求。资源地址已提供,可供下载体验。
8762 0
|
存储 人工智能 运维
AI导购革命:揭秘主动式智能导购AI助手的构建之道
本文基于《主动式智能导购AI助手构建》解决方案的实际部署体验,从引导与文档帮助、解决方案原理与架构理解、百炼大模型及函数计算应用明晰度、生产环境步骤指导四个方面进行了详细评估。指出尽管该方案具有创新性和实用性,但在文档详尽性、技术细节解释及生产环境适应性等方面仍有待提升。通过进一步优化,可增强解决方案的可用性和用户满意度。
418 31
|
iOS开发
mac版本Beyond Compare如何一直试用
mac版本Beyond Compare如何一直试用
1104 0
mac版本Beyond Compare如何一直试用
|
人工智能 算法 数据挖掘
语义熵识破LLM幻觉!牛津大学新研究登Nature
【7月更文挑战第22天】牛津大学研究者在Nature发布&quot;使用语义熵检测大模型幻觉&quot;。语义熵新方法有效识别大模型(LLMs)生成的不实或误导信息,通过聚类分析不同回答的语义等价性并计算概率,展示超越基线的幻觉检测能力,提升LLMs的可靠性。
755 7
【洛谷 P1002】[NOIP2002 普及组] 过河卒 题解(递归+记忆化搜索)
`NOIP2002`普及组的过河卒问题是一个棋盘路径计数挑战。卒从$(0,0)$出发到$(n,m)$,只能向下或向右移动,马在$(c1,c2)$固定,控制某些点。任务是计算不受马阻挡的路径数。输入是目标和马的位置,输出是路径总数。使用动态规划和记忆化搜索避免重复计算,样例输入$(6,6,3,3)$输出$6$。代码中定义了$f(x,y)$计算$(x,y)$处的路径数,利用边界条件和递推关系计算。
278 0
|
C++
【洛谷 P1601】A+B Problem(高精)题解(高精度+向量)
该问题要求解决高精度加法(正数)的A+B问题。给定两个不超过10^500的大整数a和b,程序需输出它们的和。样例输入包括两个整数,如1和1,输出为2;另一样例是1001和9099,输出为10100。解决方案通过模拟十进制加法实现,代码使用C++,将输入转换为字符数组,然后逐位相加并处理进位。最终结果反向输出。
400 0
|
SQL 缓存 关系型数据库
API 接口性能优化管理
本文探讨了国内项目中常见的接口性能问题及其优化策略。面对紧张的工期与多样的编码习惯,文章系统地分析了性能需求、确立了性能标准,并详细列举了常见的性能瓶颈,如循环调用数据库、不当的SQL编写及数据处理方式等。针对这些问题,提出了包括配置调整、代码改进、数据库优化、引入缓存机制、利用异步处理等在内的多种解决方案,并强调了可观测性工具的重要性。通过这些方法,能有效提升接口性能和用户体验。
|
存储 传感器 算法
在嵌入式系统中,硬件和软件之间存在的关系
在嵌入式系统中,硬件和软件之间存在的关系
1041 1