【题目链接】

ybt 1190:上台阶
OpenJudge NOI 2.3 3525:上台阶
注:ybt 1190最大数据数量为71,而OpenJudge 2.3 3525中最大数据数量为100。如果把数组a设为int,在OpenJuge中能过,但在ybt中不能过。

【题目考点】

1. 递推

2. 记忆化递归

【解题思路】

1. 递推

  • 递推状态:aia_iai​:到第i阶台阶的走法
  • 初始状态:
    到第1个台阶有1种走法:a1=1a_1 = 1a1​=1。
    到第2个台阶可以走两步每次走1阶,或一步跨2阶,有2种走法:a2=2a_2 = 2a2​=2
    到第3个台阶,可以走3步每次走1阶,可以走一步1阶一步2阶,或一步2阶一步1阶,或一步3阶,共4种走法:a3=4a_3 = 4a3​=4
  • 递推关系:
    思考要想到走第i个台阶,前一步是在第几个台阶。
    可以是从第i-1个台阶走1阶,到第i个台阶。到第i-1个台阶的走法为ai−1a_{i-1}ai−1​种,那么这种走法的种类数量为ai−1a_{i-1}ai−1​
    可以是从第i-2个台阶一步走2阶,到第i个台阶。这种走法的种类数量为ai−2a_{i-2}ai−2​
    可以是从第i-3个台阶一步走3阶,到第i个台阶。这种走法的种类数量为ai−3a_{i-3}ai−3​
    所以走到第i个台阶的总走法数量为:ai=ai−1+ai−2+ai−3a_i = a_{i-1}+a_{i-2}+a_{i-3}ai​=ai−1​+ai−2​+ai−3​

该题有多次询问,可以先通过递推求出a1∼a100a_1\sim a_{100}a1​∼a100​,再根据输入的序号在数组中取值。
注意:数组a的类型要设为long long

【题解代码】

解法1:递推

#include <bits/stdc++.h>
using namespace std;
int main()
{long long a[105];int x;a[1] = 1, a[2] = 2, a[3] = 4;for(int i = 4; i <= 100; ++i)a[i] = a[i-1] + a[i-2] + a[i-3];while(cin >> x && x != 0)cout << a[x] << endl;return 0;
}

解法2:记忆化递归

#include <bits/stdc++.h>
using namespace std;
long long a[105];
long long solve(int x)//上x阶台阶的走法数量
{if(a[x] > 0)return a[x];if(x == 1)return 1;else if(x == 2)return 2;else if(x == 3)return 4;elsereturn a[x] = solve(x-1) + solve(x-2) + solve(x-3);
}
int main()
{int x;while(cin >> x && x != 0)cout << solve(x) << endl;return 0;
}

信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶相关推荐

  1. 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和

    [题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 2. 求最小公倍数 [解题思路] 求最大公约数,可以用辗转相除法.具体 ...

  2. 信息学奥赛一本通 1294:Charm Bracelet | OpenJudge NOI 2.6 7113:Charm Bracelet | 洛谷 P2871

    [题目链接] ybt 1294:Charm Bracelet OpenJudge NOI 2.6 7113:Charm Bracelet 洛谷 P2871 [USACO07DEC]Charm Brac ...

  3. 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)

    信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法   更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...

  4. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  5. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  6. 信息学奥赛一本通 2021:【例4.6】最大公约数

    [题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...

  7. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  8. 信息学奥赛一本通在线提交地址

    信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...

  9. 信息学奥赛一本通 (C++)上机练习

    信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...

最新文章

  1. linux终端定时器实验报告,定时器实验报告.doc
  2. 阅面科技赵京雷:全面拥抱AI2.0时
  3. MySQL学习笔记(三)
  4. html怎么做交互留言,简单html与servlet交互
  5. linux   图片
  6. Scribe应用实例
  7. 单/双中括号与测试条件
  8. Windows 下修改 MySQL 编码为 utf8
  9. ssis sql_使用sp_help_revlogin和SSIS传输登录任务将SQL登录名传输到AG的辅助副本
  10. Install SQL Server 2008 Setup failure
  11. Mybatis的注解应用之映射声明
  12. Pychram - 使用介绍
  13. python色彩变换CMYK,RGB,HSI
  14. 扫盲:Java 后端开发常用的 10 种第三方服务
  15. 嵌入式Linux入门-代码重定位和清除bss段讲解
  16. 独家解读 | 2018 恶意机器流量报告
  17. 阿里网盘资源查找使用技巧
  18. 算法学习系列(贪心算法)—机器人攀登问题
  19. 交互设计:依据用户体验要素知识点,进行APP的分析和改良设计。
  20. Python爬取10529条《三十而已》热评,看看大家都说了些啥!

热门文章

  1. SSIS Dataflow使用存储过程不能检索列名
  2. Junit 4.x 单元测试,参数化测试,套件测试 实例
  3. linux节点ssh免密码登录linux节点
  4. din算法 代码_DIN算法代码详细解读
  5. IntelliJ IDEA 2021.2 正式发布
  6. 大厂是如何甄别应聘者简历的包装程度的?
  7. 给 JDK 报了一个 P4 的 Bug,结果居然……
  8. 资深架构专家聊架构之道:灵活、稳定、高可用15点精要
  9. 趣图:老师讲算法 vs 油管三哥讲算法
  10. 6月份Github上最热门的Java开源项目!