9.1 有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一个方法,计算小孩有多少种上楼梯的方法。

解法:

我们可以采用自上而下的方式来解决这个问题。小孩上楼梯的最后一步,也就是抵达第n阶的那一步,可能走1阶、2阶或3阶。也就是说,最后一步可能是从第n-1阶往上走1阶、从n-2阶往上走2阶,或从第n-3阶往上走3阶。因此,抵达最后一阶的走法,其实就是抵达这最后三阶的方式的总和。

递归的方法实现:

  1. int countWaysD(int n)
  2. {
  3. if(n<)
  4. return ;
  5. else if(n==)
  6. return ;
  7. else
  8. {
  9. return countWaysD(n-)+countWaysD(n-)+countWaysD(n-);
  10. }
  11. }

使用3个临时变量的方法:

  1. int countWays(int n)
  2. {
  3. if(n<)
  4. return ;
  5. if(n==)
  6. return ;
  7. int first=,second=,third=;
  8. int i=;
  9. int ret;
  10. while(i<=n)
  11. {
  12. ret=first+second+third;
  13. first=second;
  14. second=third;
  15. third=ret;
  16. i++;
  17. }
  18. return ret;
  19. }

使用dp的方法,需要一个数组来记录前面已经求出的值。

  1. int countWaysDP(int n,int dp[])
  2. {
  3. if(n<)
  4. return ;
  5. if(n==)
  6. return ;
  7. if(dp[n]>)
  8. return dp[n];
  9. else
  10. dp[n]=countWaysDP(n-,dp)+countWaysDP(n-,dp)+countWaysDP(n-,dp);
  11. return dp[n];
  12. }

C++实现代码:

  1. #include<iostream>
  2. #include<cstring>
  3. #include<climits>
  4. using namespace std;
  5.  
  6. const int MAX=;
  7.  
  8. int countWaysD(int n)
  9. {
  10. if(n<)
  11. return ;
  12. else if(n==)
  13. return ;
  14. else
  15. {
  16. return countWaysD(n-)+countWaysD(n-)+countWaysD(n-);
  17. }
  18. }
  19. int countWays(int n)
  20. {
  21. if(n<)
  22. return ;
  23. if(n==)
  24. return ;
  25. int first=,second=,third=;
  26. int i=;
  27. int ret;
  28. while(i<=n)
  29. {
  30. ret=first+second+third;
  31. first=second;
  32. second=third;
  33. third=ret;
  34. i++;
  35. }
  36. return ret;
  37. }
  38.  
  39. int countWaysDP(int n,int dp[])
  40. {
  41. if(n<)
  42. return ;
  43. if(n==)
  44. return ;
  45. if(dp[n]>)
  46. return dp[n];
  47. else
  48. dp[n]=countWaysDP(n-,dp)+countWaysDP(n-,dp)+countWaysDP(n-,dp);
  49. return dp[n];
  50. }
  51.  
  52. int main()
  53. {
  54. int dp[MAX]={};
  55. for(int i=; i<; i++)
  56. cout<<countWays(i)<<endl;
  57. }

careercup-递归和动态规划 9.1的更多相关文章

  1. 70. Climbing Stairs【leetcode】递归,动态规划,java,算法

    You are climbing a stair case. It takes n steps to reach to the top. Each time you can either climb ...

  2. 算法 递归 迭代 动态规划 斐波那契数列 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. C#递归、动态规划计算斐波那契数列

    //递归         public static long recurFib(int num)         {             if (num < 2)              ...

  4. 面试题目——《CC150》递归与动态规划

    面试题9.1:有个小孩正在上楼梯,楼梯有n个台阶,小孩一次可以上1阶.2阶或者3阶.实现一个方法,计算小孩有多少种上楼梯的方式. 思路:第4个数是前三个数之和 注意:能不能使用递归,能不能建立一个很大 ...

  5. python---通过递归和动态规划策略解决找零钱问题

    也是常见套路. # coding = utf-8 def rec_mc(coin_value_list, change, know_results): min_coins = change if ch ...

  6. Idea 02.暴力递归与动态规划(1)

    1,关键词解释 1.1 暴力递归: 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子问题的结果之后的决策过程 4, 不记 ...

  7. scramble-string——两个字符串经过树化并旋转后是否一致、递归、动态规划

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  8. OptimalSolution(1)--递归和动态规划(1)斐波那契系列问题的递归和动态规划

    一.斐波那契数列 斐波那契数列就是:当n=0时,F(n)=0:当n=1时,F(n)=1:当n>1时,F(n) = F(n-1)+F(n-2). 根据斐波那契数列的定义,斐波那契数列为(从n=1开 ...

  9. 递归,动态规划,找最短路径,Help Jimmy

    题目链接:http://poj.org/problem?id=1661 解题报告: 1.老鼠每次来到一块木板上都只有两条路可以走,可以使用递归 #include <stdio.h> #in ...

  10. 《Cracking the Coding Interview》——第9章:递归和动态规划——题目10

    2014-03-20 04:15 题目:你有n个盒子,用这n个盒子堆成一个塔,要求下面的盒子必须在长宽高上都严格大于上面的.如果你不能旋转盒子变换长宽高,这座塔最高能堆多高? 解法:首先将n个盒子按照 ...

随机推荐

  1. eclipse 新建项目下后.metadata\.plugins的文件夹解释和如何保存自己的特定工程设置

    eclipse 新建项目下后.metadata\.plugins的文件夹解释和如何保存自己的特定工程设置 [org.eclipse.core.runtime] 字体,maven的setting.xml ...

  2. 【HDOJ】2054 A == B ?

    这道题目起初看,so easy.再看一下ac率,注意到没有说明变量类型.显然是一道字符串的题.需要考虑+/-符号位,+.1.-.1.00010.0.+0.-00.00等情况,同时数组开到100000以 ...

  3. XBMC 最新版本错误

    1. Syntax error: "(" unexpected 修改 tools/depends下的makefile.include 将NDK_VER=0x9d

  4. U制作LFS linux

    我希望自己的LFS运行在U盘上,远期目标是要制作一个基于LFS的编程练习U盘,方便自己的编程练习.今天算是工作的第一步,先把LFS做到U盘上. 把Linux做到U盘上通常的做法是采用两步启动法:先生成 ...

  5. An error occurred while filtering resources

    一个比较恶心的问题.在使用过程中项目中有个错误 ,找不到原因.. An error occurred while filtering resources     Maven -> Update ...

  6. Mac OS X 10.10(yosemite)更新后,cocoapods出错, 及cocoapods更新至0.34后, 错误情况整理

    1:Mac升级10.10后,执行pod install出错如下 QTX-Will-mini:NewHishop willbin$ pod install [!] Unable to load a sp ...

  7. 从零开始学习jQuery (九) jQuery工具函数

    一.摘要 本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案,  即使你会使用jQuery也能在阅读中发现些许秘籍. 我们经常要使用脚本处理各种业务逻辑, 最常见的就 ...

  8. 安装Visual Studio2015后,使用VS2013开发的项目,在IIS访问都提示“公共语言运行时检测到无效的程序”的解决办法

    1.安装VS2015后,.NET Framework4.6会替换掉 C:\Windows\Microsoft.NET\Framework64\v4.0.30319 (如果使用的是windows7 64 ...

  9. bootstrap基本标签总结[转]

    文件头: DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title> ...

  10. Cocos2d-x ios 下http请求的另一种实现

    简单描述下需求:游戏要加入事件log,比如玩家升到10级:创建角色:或是,触发这些事件后要求客户端忘后台抛送一条log信息.一般情况下,我们可以直接使用cocos自带的HttpClient(底层用li ...