博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态规划--上楼梯
阅读量:4684 次
发布时间:2019-06-09

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

题目:假设你需要进入一个房间,但是房间在楼上,你需要走完n阶台阶,才能到楼上,如果你一次性可以走1、2或3个台阶,可以计算出你一共有多少种方案去走完所有的台阶进入房间呢?

 

解题思路:定义一个状态函数f(n)用来表示如果要走n阶台阶一共可以有方案数量,则f(n)=f(n-1)+f(n-2)+f(n-3)。当n=1时只有一中方案,当n=2时有两种方案(1,1;2),当n=3时有4种方案(1,1,1;1,2;2,1;3),依次类推。

 

具体算法(Java版)

1 /** 2  * 计算n个台阶一共有多少种走法 3  */ 4 public class Step { 5  6     public static int walk(int n, int[] stepWays) { 7         if (n <= 0) 8             return 0; 9         int count = 0;10         for (int i = 0; i < stepWays.length; i++) {11             if (n == stepWays[i]) {12                 count += 1;13             } else {14                 count += walk(n - stepWays[i], stepWays);15             }16         }17         return count;18     }19 20     public static void main(String[] args) {21         int[] stepWays = new int[] { 3, 1, 2};22         int n = 10;23         System.out.println(walk(n, stepWays));24     }25 26 }

 

如果有什么问题,可以一起交流! 

 

转载于:https://www.cnblogs.com/pinxiong/p/5870337.html

你可能感兴趣的文章
SpringBoot--外部配置
查看>>
C#中的线程三 (结合ProgressBar学习Control.BeginInvoke)
查看>>
sqlserver工作日常使用sql--持续完善中
查看>>
文件I/O与标准I/O
查看>>
大数据学习之路(持续更新中...)
查看>>
项目开发总结报告(GB8567——88)
查看>>
enumerate使用
查看>>
BZOJ1930: [Shoi2003]pacman 吃豆豆
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
编译原理实验一
查看>>
Git for Android Studio 学习笔记
查看>>
pip 警告!The default format will switch to columns in the future
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>