算法分析之爬楼梯问题

一个人每次只能走一层楼梯或者两层楼梯,问走到第n层楼梯一共有多少种方法
利用动态规划实现如下:

#include <iostream>
using namespace std;

const int MAX = 100;
int result[MAX];
int fib_time(int n) {
	int res;
	if (result[n]>0)    //若大于零,说明该子问题原来已经求过解
		return result[n];   //直接返回对应的数组元素
	if (n == 0 || n == 1)
		res = 1;
	else
		res = fib_time(n - 1) + fib_time(n - 2);
	result[n] = res;  //每次都将求过解的子问题赋给对应数组元素
	return res;
}
int main() {
	int i = 0;
	int n = 0;

	cout << "Please input the number of Stairs:" << endl;
	cin >> n;

	for (i = 0; i <= n; i++)
	{
		result[i] = -1;
	}

	cout << "The differ_way_number is:"<<endl<<fib_time(n) << endl;;
	return 0;
}

测试:

原文地址:https://www.cnblogs.com/khnl/p/11639454.html

时间: 2024-11-09 02:53:12

算法分析之爬楼梯问题的相关文章

回溯解决爬楼梯问题

1.问题描写叙述 每次爬楼梯有每次可跨1,2,3步.爬上一个N阶楼梯有多少种方式,打印出每种方式. 2.源码 // ConsoleApplication6.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <vector> #include <map> using namespace std; typedef std::vector<int> V

爬楼梯问题

// 爬楼梯.cpp : 定义控制台应用程序的入口点.// #include "stdafx.h"#include<iostream>using namespace std; int main(){ int n; cin >> n; int a = 1, b = 1, k = 0; if (n == 1 || n == 0) {  cout<<1; } while (--n > 0) {  k = a + b;  b = a;  a = k; 

蒜头爬楼梯

1000ms 65536K 蒜头君自从春节回来以后,体重就像加了特技一样duang~duang~地暴增起来.于是小蒜头打算每天爬楼梯来燃烧体内的脂肪(咦?蒜怎么会有脂肪=.=).蒜头在爬楼梯的时候脑洞大开,因为蒜头腿短,爬楼梯的时候一次只能迈1级或2级台阶,它就想到了,假如一共有n级台阶的话,它一共有多少种方法能够爬到楼梯顶部呢? 聪明的你快来帮帮小蒜头吧~建议你使用动态规划求解哦,直接搜索是会超时的^o^ 输入格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 输出格式: 第一行输出你

codevs——1742 爬楼梯

1742 爬楼梯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 小明家外面有一个长长的楼梯,共N阶.小明的腿很长,一次能跨过一或两阶.有一天,他突发奇想,想求出从最低阶到最高阶共有几种爬楼梯的方案.你帮帮他吧! 输入描述 Input Description 一个整数N. 输出描述 Output Description 一个整数,为方案总数. 样例输入 Sample Input 5 样例输出 Sample Output 8

3:爬楼梯

描述:假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 样例 比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法 返回 3 class Solution { public: /** * @param n: An integer * @return: An integer */ long climbStairs(int n) { // write your code here if(n==0) return 1; long  s

爬楼梯(LintCode)

爬楼梯 假设你正在爬楼梯,需要n步你才能到达顶部.但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶部? 样例 比如n=3,1+1+1=1+2=2+1=3,共有3中不同的方法 返回 3 用递归又超时了..于是又换了DP,dp并不熟悉,于是又搞了好久. 首先向右是跳一格,向下是跳两格,dp[j]是到达(i,j)的不同的路径数,把每一行最左的剩余步数为0的点的路径数求和就是答案. 1 public class Solution { 2 /** 3 * @param n: An integer

水leetcode 爬楼梯

public class Solution { public int climbStairs(int n) { if(n==1) return 1; if(n==2) return 2; int pre=1; int cur=2; for(int i=3;i<=n;i++) { int tem=pre; pre=cur; cur=pre+tem; } return cur; // else return climbStairs(n-1)+climbStairs(n-2); }} 水leetcod

(递归)3089:爬楼梯

描述 树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级也可以第一次走两级,第二次走一级,一共3种方法. 输入 输入包含若干行,每行包含一个正整数N,代表楼梯级数,1 <= N <= 30输出不同的走法数,每一行输入对应一行输出样例输入 5 8 10 样例输出 8 34 89 我の思考 我们需要走n个阶梯,我们的第一步,可能是1步,也可能是2步. 如果我们走了1步,就还要走n-1步,走了两步,还要走n-

结对合作-乘坐电梯的所有乘客爬楼梯的层数之和最少

组员 石鹤李海超 一.题目 石家庄铁道大学基础大楼一共有四部电梯,每层都有人上下,电梯在每层都停.信1201-1班的张一东觉得在每层都停觉得不耐烦. 由于楼层不太高,在上下课高峰期时时,电梯从一层上行,但只允许停在某一楼层.在一楼时,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层. 问电梯停在那一楼层,能够保证这次乘坐电梯的所有乘客爬楼梯的层数之和最少. 二.设计思想 算出停在各层需要爬的层数,比较得出最小的. 我也考虑了老师说的优化方法,但我觉得假如2层和4层都满足那种条件,而那个公式没