信息学奥赛一本通 1190:上台阶 | OpenJudge NOI 2.3 3525:上台阶
【题目链接】
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:上台阶相关推荐
- 信息学奥赛一本通 1209:分数求和 | OpenJudge NOI 1.13 12:分数求和
[题目链接] ybt 1209:分数求和 OpenJudge NOI 1.13 12:分数求和 [题目考点] 1. 求最大公约数 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 ...
- 信息学奥赛一本通(基础算法与数据结构-题解汇总目录)
信息学奥赛一本通(C++版)在线评测系统 基础(二)基础算法 更新中...... 第一章高精度计算 1307[例1.3]高精度乘法 1308[例1.5]高精除 1309[例1.6]回文数(Noip ...
- 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制
[题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...
- 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题
第1章 快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章 素数 第 3 章 约数 第 4 章 同余问题 第 5 章 矩阵乘法 第 6 章 ...
- 信息学奥赛一本通 2021:【例4.6】最大公约数
[题目链接] ybt 2021:[例4.6]最大公约数 [题目考点] 1. while循环 2. 求最大公约数 辗转相减法 辗转相除法 [解题思路] 解法1:枚举 取较小数字,从该数字的值开始从大到小 ...
- 信息学奥赛一本通(C++版) 刷题 记录
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...
- 信息学奥赛一本通在线提交地址
信息学奥赛一本通 1 C++语言入门 1.1 综合 1.1.1 P1458 地球人口承载力估计 正确: 770 提交: 1794 比率: 42.92 % 1.1.2 P1686 Hello, Worl ...
- 信息学奥赛一本通 (C++)上机练习
信息学奥赛一本通(C++)上机练习 此书为娃儿的第一本刷题书.娃儿现在四年级 ,希望他能坚持下来.特开贴加油 luogu: disangan223 第一部分 C++语言 第一章 C++语言入门 T10 ...
最新文章
- linux终端定时器实验报告,定时器实验报告.doc
- 阅面科技赵京雷:全面拥抱AI2.0时
- MySQL学习笔记(三)
- html怎么做交互留言,简单html与servlet交互
- linux 图片
- Scribe应用实例
- 单/双中括号与测试条件
- Windows 下修改 MySQL 编码为 utf8
- ssis sql_使用sp_help_revlogin和SSIS传输登录任务将SQL登录名传输到AG的辅助副本
- Install SQL Server 2008 Setup failure
- Mybatis的注解应用之映射声明
- Pychram - 使用介绍
- python色彩变换CMYK,RGB,HSI
- 扫盲:Java 后端开发常用的 10 种第三方服务
- 嵌入式Linux入门-代码重定位和清除bss段讲解
- 独家解读 | 2018 恶意机器流量报告
- 阿里网盘资源查找使用技巧
- 算法学习系列(贪心算法)—机器人攀登问题
- 交互设计:依据用户体验要素知识点,进行APP的分析和改良设计。
- Python爬取10529条《三十而已》热评,看看大家都说了些啥!