0004-猴子爬山-java知识

文章讲述了如何解决猴子爬山问题,即在n个台阶中,每次跳1步或3步,求不同跳跃方式的数量。通过递推关系f[n]=f[n-1]+f[n-3](n>3),给出了解题方法和示例。
摘要由CSDN通过智能技术生成

题目描述

一天一只顽猴想要从山脚爬到山顶,
途中经过一个有n个台阶的阶梯,
但是这个猴子有个习惯,每一次只跳1步或3步
试问?猴子通过这个阶梯有多少种不同的跳跃方式

输入描述

输入只有一个数n, 0 < n < 50
代表此阶梯有多个台阶

输出描述

有多少种跳跃方式

示例一

输入

50

输出

122106097

示例二

输入

3

输出

2

注意项-爬楼梯问题

这道题最主要就是找规律
爬楼梯问题,一次爬m步或z步,总共n个台阶(n>m&&n>z)
公式:dp[n]=dp[n-m]+[n-z]
代入到本题,就是: fn = fn-1 + fn-3

那这个结论怎么得出来的呢

设n=30,上山最后一步到达第30级台阶,完成上山,共有f[30]种不同的爬法;到第30级之前位于哪一级呢?第一种是位于第29级(上跳1级即到),有f[29]种;第二种于第27级(上跳3级即到),有f[27]种;于是有:
f[30]=f[29]+f[27]
依此类推,一般地有递推关系:
f[n]=f[n-1]+f[n-3] (n>3)

看懂了吗,看不懂那就来看看实例吧

台阶n上楼梯方式【1为跳一步;3为走三步】上楼梯方式总次数fn关系
111f[1]
21、11f[2]
31、1、1;32f[3]
41、1、1、1;3、1
1、3
3f[4]=f[3]+f[1]
51、1、1、1、1;3、1、1; 1、3 、1
1、1、3
4f[5]=f[4]+f[2]
61、1、1、1、1、1;3、1、1、1; 1、3 、1、1 ; 1、1、3、1;
1、1、1、3;3 、3
6f[6]=f[5]+f[3]

看完这个列表是不是清楚了很多

解题思路

递归也好、标下标也好、变量赋值也好大体思路如下:

  • 先判断n的值,若为1、2、3,则固定输出1或2,若大于3,则进行 f[n]=f[n-1]+f[n-3] 公式的套用
  • 进行数据迭代

解题答案

0004-猴子爬山

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值