运筹学上有一章节专门讲动态规划的,印象比较深刻的有一道爬楼梯问题,用dp思想来解决。
【题目】大概是这样:有n级楼梯,每次只能爬1级或2级楼梯,问爬完总共有多少种方法?
转化为程序描述如下:
输入: 2 输出: 2 解释: 有两种方法可以爬到楼顶。输入: 3 输出: 3 解释: 有三种方法可以爬到楼顶。
【解析】
根据题目意思,我们采用逆推的形式进行推理:
我们用f(n)表示爬完第n格楼梯的方法总数。第n格楼梯可以直接由第n-1格、第n-2格楼梯直接到达,即原题目可转化为爬完第n-1格和爬完第n-2格楼梯的方法数的总和,即f(n)=f(n-1)+f(n-2).
往下逆推:f(n-1)=f(n-2)+f(n-3) , ...... , f(3)=f(2)+f(1)
爬完2格楼梯有两种方法,即f(2)=2;爬完1格楼梯有一种方法,即f(1)=1.
由此我们不难给出代码:
/**
* 动态规划之爬楼梯
* @author jsyuger
* 2021年11月3日
*/
public class SolutionClimbStairs {
/**
*