猴子爬山问题

一、题目描述

一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯:

每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式?

二、输入输出描述

输入描述
  • 一个整数N,表示此阶梯的总台阶数,0<N<=50。
输出描述
  • 一个整数,代表猴子爬完所有台阶的总跳跃方式数。

三、示例

|----|-----------|
| 输入 | 50 |
| 输出 | 122106097 |
| 说明 | |

|----|---|
| 输入 | 3 |
| 输出 | 2 |
| 说明 | |

四、解题思路

1. 核心思想

使用动态规划(DP) ,把大问题拆解成小问题:爬到第 i 级的方案 = 前面某些级方案的和,通过递推公式一步步算出最终答案。

2. 问题本质分析

这是一个递推计数问题

  • 规则:每次只能爬 1 级 或 3 级
  • 目标:求爬到第 n 级的总方案数
  • 本质:用前面的结果推导后面的结果(无后效性)

3. 核心逻辑

  1. 状态定义dp[i] = 爬到第 i 级台阶的方案数
  2. 递推公式
    • 要到第 i 级,最后一步只有两种可能
      1. 从 i-1 级 爬 1 级 上来 → 方案数:dp[i-1]
      2. 从 i-3 级 爬 3 级 上来 → 方案数:dp[i-3]
    • 所以:dp[i] = dp[i-1] + dp[i-3]
  3. 初始条件:手动给出前 3 级的答案
  4. 递推计算:从 4 到 n 依次算出每一级的方案数

4. 步骤拆解

  1. 输入:读取目标台阶数 n
  2. 定义 dp 数组:存储每级台阶的方案数
  3. 初始化边界
    • dp1 = 1
    • dp2 = 1
    • dp3 = 2
  4. 循环递推
    • 从 4 到 n
    • 用公式 dp[i] = dp[i-1] + dp[i-3] 计算
  5. 输出结果 :输出 dp[n]

五、代码实现

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        // dp[i] 表示爬到第i级台阶的方案数
        long[] dp = new long[n + 1];

        // 初始边界条件
        if (n >= 1) {
            dp[1] = 1;
        }
        if (n >= 2) {
            dp[2] = 1;
        }
        if (n >= 3) {
            dp[3] = 2;
        }

        // 动态规划递推
        for (int i = 4; i <= n; i++) {
            dp[i] = dp[i - 1] + dp[i - 3];
        }

        System.out.println(dp[n]);
    }
}
相关推荐
Mark_ZP6 分钟前
【锁1】Synchronized vs ReentrantLock区别
java
木木子2242 分钟前
# 鸿蒙 ArkTS 实战:秒表 Stopwatch(示例 5)
数据结构·华为·list·harmonyos
立心者01 小时前
SpringBoot中使用TOTP实现MFA(多因素认证)
java·spring boot·后端
枕星而眠1 小时前
C++ STL Map容器完全指南:从有序红黑树到无序哈希表
java·开发语言
zdj_develop1 小时前
鸿蒙应用开发实战(一):应用程序包概述
华为·harmonyos
geats人山人海2 小时前
数据结构第六章c语言 树的存储下二叉树的概念和存储
c语言·数据结构·算法
bbq粉刷匠2 小时前
HashMap 底层原理深度拆解(二):putVal 完整链路解析(懒加载 · 链表遍历 · 尾插法)
java·开发语言·哈希算法
Sam_Deep_Thinking2 小时前
一个靠谱的C端网关服务应该包含什么内容
java·程序员·系统架构
HeiSenBerg2 小时前
Android 网络协议全解析:从 TCP 三次握手到 HTTPS 加密,一篇就够了
面试
漂流瓶jz2 小时前
UVA-12627 奇怪的气球膨胀 题解答案代码 算法竞赛入门经典第二版
算法·图论·递归·aoapc·算法竞赛入门经典·uva·12627