博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
careercup-递归和动态规划 9.1
阅读量:7296 次
发布时间:2019-06-30

本文共 1802 字,大约阅读时间需要 6 分钟。

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

解法:

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

 

递归的方法实现:

int countWaysD(int n){    if(n<0)        return 0;    else if(n==0)        return 1;    else    {        return countWaysD(n-1)+countWaysD(n-2)+countWaysD(n-3);    }}

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

int countWays(int n){    if(n<0)        return 0;    if(n==0)        return 1;    int first=0,second=0,third=1;    int i=1;    int ret;    while(i<=n)    {        ret=first+second+third;        first=second;        second=third;        third=ret;        i++;    }    return ret;}

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

int countWaysDP(int n,int dp[]){    if(n<0)        return 0;    if(n==0)        return 1;    if(dp[n]>0)        return dp[n];    else        dp[n]=countWaysDP(n-1,dp)+countWaysDP(n-2,dp)+countWaysDP(n-3,dp);    return dp[n];}

C++实现代码:

#include
#include
#include
using namespace std;const int MAX=1000;int countWaysD(int n){ if(n<0) return 0; else if(n==0) return 1; else { return countWaysD(n-1)+countWaysD(n-2)+countWaysD(n-3); }}int countWays(int n){ if(n<0) return 0; if(n==0) return 1; int first=0,second=0,third=1; int i=1; int ret; while(i<=n) { ret=first+second+third; first=second; second=third; third=ret; i++; } return ret;}int countWaysDP(int n,int dp[]){ if(n<0) return 0; if(n==0) return 1; if(dp[n]>0) return dp[n]; else dp[n]=countWaysDP(n-1,dp)+countWaysDP(n-2,dp)+countWaysDP(n-3,dp); return dp[n];}int main(){ int dp[MAX]={
0}; for(int i=1; i<10; i++) cout<
<

 

转载地址:http://vqynm.baihongyu.com/

你可能感兴趣的文章
css
查看>>
main_loop()函数解析(1)
查看>>
三维的对象表示---OpenGL二次曲面和三次曲面函数
查看>>
MySQL5.5/5.6/5.7的安装脚本
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
BUG管理系统(Mantis)迁移实录
查看>>
20161011L04-03老男孩linux运维实战培训-Linux系统的用户和用户组管理-01
查看>>
我的友情链接
查看>>
oracle表空间操作详解
查看>>
Oracle从零开始04——SQL语句03——单行函数
查看>>
C语言数组名和指针
查看>>
帧中继配置
查看>>
eclipse安装快速打开项目所在位置的插件
查看>>
Python爬虫框架Scrapy 学习笔记 6 ------- 基本命令
查看>>
lvm快照的创建恢复
查看>>
数学之美笔记(二十)
查看>>
网站设计八步骤
查看>>
Oracle系统用户的默认密码及功能
查看>>
获取数组中的最大值
查看>>