当前位置: 首页 > news >正文

AcWing 5933:爬楼梯 ← 递归 / 递推 / 高精度

【题目来源】
https://www.acwing.com/problem/content/5936/

【题目描述】
树老师爬楼梯,他可以每次走 1 级或者 2 级,输入楼梯的级数,求不同的走法数。
例如:楼梯一共有 3 级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共 3 种方法。

【输入格式】
输入包含若干行,每行包含一个正整数 N,代表楼梯级数。

【输出格式】
不同的走法数,每一行输入对应一行输出。

【数据范围】
单个输入最多包含 30 组数据。
1≤N≤
30

【输入样例】
5
8
10

【输出样例】
8
34
89

【算法分析】
● 递归:https://oi-wiki.org/basic/divide-and-conquer/
递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。
明白递归函数的作用并相信它能完成这个任务,千万不要跳进这个函数里面企图探究更多细节, 否则就会陷入无穷的细节无法自拔。

● 递推
递推法(recurrence method)是一种根据递推关系进行问题求解的方法,也是一种重要的数学方法,常用来进行序列计算。递推法能够将复杂的运算化解为若干重复的简单运算,充分发挥了计算机擅长重复处理的特点。
递推法通过初始条件,根据递推关系式,按照一定的规律逐项进行计算,直至得到结果。递推法有正推和逆推两种形式。无论正推还是逆推,关键都是要找到递推关系式。

● 高精度:
https://blog.csdn.net/hnjzsyjyj/article/details/144703201
本题中 N≤30,问题规模较小,可以不用高精度。
但洛谷 P1255(
https://www.luogu.com.cn/problem/P1255)与本题相比,除了 N 很大外极其类似,且需要用高精度。故用高精度也实现了一下此题。

【算法代码一:递归】

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

int f(int x) {
    if(x==0 || x==1) return 1;
    return f(x-1)+f(x-2);
}

int main() {
    int n;
    while(cin>>n) {
        cout<<f(n)<<endl;
    }
}

【算法代码二:递推】

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

const int maxn=35;
int f[maxn];
int n;

int main() {
    f[0]=1,f[1]=1;
    for(int i=2; i<=maxn; i++) {
        f[i]=f[i-1]+f[i-2];
    }
    while(cin>>n) {
        cout<<f[n]<<endl;
    }
}

【算法代码三:高精度】

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

string hiAdd(string a,string b) {
    string c;
    int t=0;
    int i=a.size()-1,j=b.size()-1;
    while(i>=0 || j>=0) {
        if(i>=0) t=(a[i]-'0')+t;
        if(j>=0) t+=(b[j]-'0');
        c+=(t%10+'0');
        t/=10;
        i--,j--;
    }
    if(t!=0) c+=(t+'0');
    reverse(c.begin(),c.end());
    return c;
}

int main() {
    int n;
    while(cin>>n){
        string f[n+5];
        f[0]=f[1]="1";
        for(int i=2; i<=n; i++) {
            f[i]=hiAdd(f[i-1], f[i-2]);
        }
        cout<<f[n]<<endl;
    }

    return 0;
}

/*
in:
4

out:
5
*/



【参考文献】
https://www.acwing.com/solution/content/253657/
https://www.acwing.com/solution/content/254309/

 



 

相关文章:

  • Vue 安装 wangEditor 富文本编辑器
  • 【Redis】Mac系统一键安装redis
  • Python基于Django和人脸识别的在线票务系统设计与实现
  • Java进阶——注解一文全懂
  • MR-图解
  • 学生考勤请假管理系统
  • ai说话人分离 | 基于语音大模型进行说话人拆分
  • 【精华】为什么class在前端开发中不常用?
  • 【云原生之kubernetes实战】在k8s环境中高效部署Vikunja任务管理工具(含数据库配置)
  • 【C++】Rusage(一)
  • 广义线性模型下的数据分析(R语言)
  • 当JMeter遇见AI:性能测试进入智能时代(附实战案例)
  • 虚拟仿真无线路由器5G和2.4G发射信号辐射对比(虚拟仿真得出最小安全距离,与国际标准要求一致)
  • 百度 API 教程 006:使用BMapGL.Marker3D绘制带高度的点纹理贴图
  • 市场加速下跌,但监管「坚冰」正在消融
  • 【练习】【贪心】力扣1005. K 次取反后最大化的数组和
  • 可以用于promise面试的例子--其1
  • 基于单片机的机床切屑运输系统设计
  • cv2.solvePnP 报错 求相机位姿
  • 车载电源管理新标杆NCV8460ADR2G 在汽车电子负载开关中的应用
  • 什么是网站链接优化/互联网推广销售
  • 专业网站建设推广/河南郑州最新消息今天
  • 东莞建网站公司/目前最流行的拓客方法
  • 免费照片的网站模板免费下载/怎么做网站关键词优化
  • 吕梁做网站的公司/站长统计app
  • 网站不维护会怎么样/百度浏览器网页版入口