【爬楼梯】动态规划入门-详细讲解

题目:

一栋楼一共有n(n为正整数)个台阶,小明一步可以迈1个台阶,也可以一步2个台阶
问:小明爬n个台阶到达楼顶一共有多少种方法?

分析:

在这道题中我们进行简单推导:
一共1阶 有1种方法
一共2阶 有2种方法
一共3阶 有3种方法(等于2阶加1阶)
一共4阶 有5种方法(等于3阶加2阶)
一共5阶 有8种方法(等于4阶加3阶)

在进行分析后可以知道:
n阶方法 = (n-2)阶方法 +(n-1)阶方法
(有点像斐波那契数列)

如果大家还没有接触过动态规划,大家可以去看一下我之前写的动规解题步骤:动态规划解决方法
下面我们按照动规解题步骤进行分析题目:
一、 dp数组的定义及下标的含义
dp[i] : 达到i阶,有dp[i]种方法。
二、 确定dp公式
dp[i] = dp[i-2] + dp[i-1]
三、 dp数组如何初始化
在这道题中dp[0]表示达到0阶,有dp[0]种方法
那如果初始化 dp[0] = 0 或 dp[0] = 1;显然不符合实际生活中的意义的,但是在我们运行代码时,让dp[0] = 0,是运行不出来的,而且n为正整数,所以我们不考虑dp[0]这种情况。
那么我们初始化:
dp[0] = 1; dp[1] = 1; dp[2] = 2
四、 确定遍历顺序
我们根据递推公式:dp[i] = dp[1-2] + dp[i-1],因为最终的dp[i]是根据前面的数据而得到的,所以我们需要顺序遍历(及“从前到后”进行遍历)
五、 打印dp数组
我们先进行推导,然后打印dp数组,判断是否有错误。

代码:

遍历:

import java.util.Scanner;

public class Main {
   
    public static void main (String[] args)<
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值