经典动态规划题型 ------爬楼梯

1.题目

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

2.分析题目

题目看起来很简单,这是一个一维数组的动态规划。动态规划类型的题,一般要从初始条件开始看,一阶一阶地计算,这样子就会比较简单。
动态规划初始条件:一般要有两个或两个以上的初始条件。
1阶,一种方法;
2阶,两种方法;
(注意,因为这里是只有一阶和两阶的爬法,所以初始条件只有两种,如果有三阶四阶的爬法,初始化条件就应该对应有3,4种)
当有3阶的时候,你爬到第三阶,你只能是从第一阶或者第二阶爬上去的,所以第三阶的方法就是第一阶+第二阶。
以此类推,当爬到第i阶,就只能是从i-1或者i-2爬上去的。
因此我们就能得到动态规划的迭代:

dp[i] = dp[i-1] + dp[i-2];

3.代码

#include<stdio.h>
int main()
{
    int dp[10000],i,n;
    scanf("%d",&n);
    dp[1] = 1;
    dp[2] = 2;//初始化动态规划
    for(i=3;i<=n;i++)
    {
        dp[i] = dp[i-2] + dp[i-1];
    }
    printf("%d\n",dp[n]);
    return 0;
}

4.动态规划基本思想

(1)确定dp[i]到底是什么意思,确定状态。
(2)确定初始状态,一般是前面几个或者最后几个能够确定地得出答案,由此来推导。
(3)找到题目中的规律,得到迭代的规律。
(4)整理出代码。
这就是基本的动态规划的题的做法。

猜你喜欢

转载自blog.csdn.net/qq_46293423/article/details/104836557