超级楼梯(递推)

news/2024/6/18 21:41:36 标签: 算法, 动态规划, 数据结构, acm竞赛

题目:
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?

输入:
输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。

输出:
对于每个测试实例,请输出不同走法的数量

Sample Input
2
2
3

Sample Output
1
2

解题思路:

首先从题意分析,每一次有两种走法,第一种是走一个台阶,第二种是走两个台阶,我们从后往前看,如果它走到了第i级台阶,那么它的上一次走法有几种呢?显然是两种,从i-1级台阶或者i-2级台阶走到i级台阶。所以通过上述分析,设走到第i级台阶有f[i]总走法,那么f[i]=f[i-1]+f[i-2]也就是从到第i-1的走法,加上到i-2的走法之和。我们还可以得出f[1]=0,f[2]=1,f[3]=2,我在解释一下这三个数据,首先第一级就是开始站的位置,所以需要0步,第二级只能从第一级走一步达到,所以f[2]=1,第三级可以从第一级走两步,或者第二级走一步,(注意为什么不是从第一级走到第二级,在从第二级走到第三级呢?)因为从第二级走到第三级已经包括这种情况,所以不必考虑!

代码:

#include <iostream>
using namespace std;
int f[43];
 
int main()
{
	int n,m,i;
	f[1]=0;
	f[2]=1;
	f[3]=2;
	
	for(i=4;i<=42;++i)
		f[i]=f[i-1]+f[i-2];
	cin>>n;
	while(n--)
	{
		cin>>m;
		cout<<f[m]<<endl;
	}
	return 0;
} 

总结:
这道题主要考的是递推,和斐波那契数列,二者也都属于动态规划(DP)中初级知识,动态规划的本质就是,记录正确答案,以及两个性质,无后效性,最优子结构!


http://www.niftyadmin.cn/n/860383.html

相关文章

铺方格(升级版递推)详细解答

题目: 有一个大小是2xN的网格,现在需要用2种规格的骨牌铺满,骨牌的规格分别是2x1和2x2,请计算一共有多少铺设的方法。(从左向右铺) 输入: T组数据,N网格列数 (0<N<50) 输出: 所有方案m Sample Input 1 3 2 Sample Output 1 5 3 解题思路: 这道题和超级楼梯有异曲同工…

LIS最长上升子序列

LIS:从一串数字序列,找出连续递增的子序列,并且要求子序列最长! 举例: 一段序列:1,6,2,3,7,5,9,4,11 最长上升子序列为:1,2,3,7,9,11 那么我们如何通过代码实现呢? 我们需要一个数组f,然后通过f记录每一个数字的最大上升子序列。 初始时每一个f[i]1,因为那怕找不到任意一个子…

LCS最长公共子序列

最长公共子序列:顾名思义从两段序列中选出,其中连续并且相同的子串 举例 a串:1 5 7 9 6 3 b串:1 6 3 2 1 5 最长公共子序列 c串:1 6 3 我们如何实现呢? (假设a串有n个数字,b串有m个数字) 我们需要一个二位数组f,通过这个二维数组存放 f(i,j) f(i,j)含义:表示a串前i个数字,和b串…

01背包问题相关优化大全(二维到一维)

下面是普通版本的01背包代码! int dp[105][1005];for(int i1;i<m;i)for(int jt;j>0;j--){if(j>w[i]){dp[i][j]max(dp[i-1][j-w[i]]v[i],dp[i-1][j]);}else{dp[i][j]dp[i-1][j];}}滚动数组优化二维01背包 我们可以看到dp数组需要很大,至少超过2行! 那么我们想一想可不…

完全背包问题(详细解答)

首先完全背包问题需要01背包问题做铺垫,如果读者01背包问题没有解决,一定要理解之后,在看完全背包问题,包括01背包的优化! 这里是01背包 这里是01背包的全部优化 好,我们开始完全背包! 完全背包定义 有N种物品和一个容量为V的背包&#xff0c;每种物品都有无限件可用。第i种物…

快速幂+矩阵优化斐波那契数列(超详细教程)

文章目录前言一、快速幂二、矩阵优化斐波那契数列1.矩阵相关知识2.斐波那契数列用矩阵表示3.O(log2n)的斐波那契数列三、全部实现代码前言 我们首先讲解快速幂,然后利用快速幂优化矩阵乘法,将O(n)算法变为O(log2n),紧接着我们用矩阵实现斐波那契数列! 一、快速幂 通常我们算…

单调队列(滑动窗口问题)

单调队列定义 队内元素是单调的,递增或递减。 单调队列性质 1、队尾既可以执行入队操作,也可以执行出队操作, 但队头只能执行出队操作 单调队列解决滑动窗口最大最小值问题 题目: 有一个长为 n的序列 a&#xff0c;以及一个大小为 k 的窗口。现在这个从左边开始向右滑动&…

多重背包问题大全(超详细)

题目: 有N种物品和一个容量为V的背包。第i种物品最多有n[i]件可用&#xff0c;每件费用是c[i]&#xff0c;价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量&#xff0c;且价值总和最大。 首先多重背包问题可以转换为01背包来解决,关键就是如何转换!…