有128个台阶,每次可走一步或者两步,请问有多少种走法?

开始,我思考成排列组合问题,发现算阶乘时数太大,计算机根本不能正确计算,所以必定有别的方法。

解决办法:把问题拆分,如下:

    台阶数为    方案            方案种数

    1        1               1

    2        1-1,2              2

    3        1-1-1,1-2,2-1         3

    4        1-1-1-1,1-1-2,1-2-1,2-1-1,2-2  5

    ...        .....              ...

                           n=(n-1)+(n-2)

    就是斐波那契数列,那就好算了。

    由此题引出动态规划算法。相关思想就是:动态规划算法的基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。
    

原文地址:https://www.cnblogs.com/xingrui/p/10317126.html

时间: 2024-11-02 16:43:46

有128个台阶,每次可走一步或者两步,请问有多少种走法?的相关文章

华为机试题 N阶楼梯的走法,每次走一步或者两步

在Stairs函数中实现该功能: 一个楼梯有N阶,从下往上走,一步可以走一阶,也可以走两阶,有多少种走法? (0<n<=30)<> 例如3阶楼梯有3种走法: 1.1.1 1.2 2.1 输入样例: 3 返回值样例: 3 思路:这是最典型的类似斐波那契数列的变型.N阶楼梯,第一步有两种走法,1.走一步,则剩下N-1级      2,走两步,剩下N-2级      所以f(n)=f(n-1)+f(n-2) public static int ways(int n){ if(n==1)

用模板元实现50个台阶问题,一次走一步或者两步或者3步,用模板元实现求裴波那契额数列

 1.用模板元实现50个台阶问题,一次走一步或者两步或者3步 2.分析 由上面分析可以知道,到达N(N > 3)级台阶时的次数为:目标台阶的前3个台阶分别直接到目标台阶的次数总和. 3.模板元把在运行时消耗的时间,在编译器键优化. 4.通过模板元实现的代码如下: #include <iostream> /*这里是int 类型的,N表示台阶数量*/ template<int N> struct data { enum { res = data<N - 1>::r

(hdu step 3.1.1)超级楼梯(简单递推:从第1级到第m级有多少种走法,每次只能走一步或两步)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 652 Accepted Submission(s): 483   Problem Description

有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?

有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完? 相关问题: (1)有个人想上一个n级的台阶,每次只能迈1级或者迈2级台阶,问:这个人有多少种方法可以把台阶走完?例如:总共3级台阶,可以先迈1级再迈2级,或者先迈2级再迈1级,或者迈3次1级总共3中方式. (2)有一段楼梯有10级台阶,规定每一步只能跨一级或两级,要登上第10级台阶有几种不同的走法? (3)一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔子都不死

n个台阶,每次都可以走一步,走两步,走三步,走到顶部一共有多少种可能

分析 第一个台阶  1第二个台阶  11 2    //走两次1步或者走1次两步第三个台阶  111 12 21 3 第四个台阶  1111 112 121 211 22 13 31 思想:4阶台阶,第一次可以迈1步(还剩3台阶也就是f(3)可能)或者2步(还剩2台阶也就是f(2)可能)或者3步(还剩1台阶也就是f(1)可能) f(n)=f(n-1)+f(n-2)+f(n-3)  第n个台阶的可能 = n-1台阶的可能+n-2台阶的可能+n-3台阶的可能 我这里采用了递归算法 //param x

100个台阶,一次走一步,走两步,走三步,有多少种可能

分析 第一个台阶  1第二个台阶  11 2    //走两次1步或者走1次两步第三个台阶  111 12 21 3 第四个台阶  1111 112 121 211 22 13 31f(n)=f(n-1)+f(n-2)+f(n-3)  第n个台阶的可能 = n-1台阶的可能+n-2台阶的可能+n-3台阶的可能 我这里采用了递归算法 //param x 台阶数目 int goadd(int x) { if (x == 1){ return 1; } else if (x == 2){ return

Climbing Stairs 爬楼梯问题,每次可以走1或2步,爬上n层楼梯总方法 (变相fibnacci)

You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb 1 or 2 steps. In how many distinct ways can you climb to the top? 当n=1时,有1种方法,即直接走1步 当n=2时,有2方法:连续走2步,或直接走两步 对于n,设f(n)为总方法,则 f(n) = f(n-1)+f(n-2) ps:f

在如下8*6的矩阵中,请计算从A移动到B一共有____种走法。要求每次只能向上或向右移动一格,并且不能经过P。

在如下8*6的矩阵中,请计算从A移动到B一共有__种走法.要求每次只能向上或向右移动一格,并且不能经过P. A:456 B:492 C:568 D:626 E:680 F:702 解析: 8*6的矩阵,从左下角A到右上角B,一共需要走12步,其中5步向上,7步向右,因此总的走法一共有C(12,5)=792种,但题目规定不能经过P,因此需要减去经过P点的走法. 经过P的路径分为两部分,从A到P,从P到B. 同理,从A到P的走法:C(6,2)=15: 同理,从P到B的走法:C(6,3)=20: 因此

第39级台阶 每步1个或2个台阶 有多少种上法

小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步.那么,上完39级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案. #define _CRT_SECURE_NO_WARNINGS#include <string.h>#include <stdlib.h>#include <