dp_day1

发布时间:2024年01月22日

dp四步

1,明确dp数组及下标含义

2.确定递推公式

3..据题意初始化dp数组

4.确定求dp数组的遍历顺序

几道简单的dp题

1.斐波那契数列

1.dp[i]含义:第i项斐波那契数列

2.递推公式:dp[i]=dp[i-1]+dp[i-2]

3.初始化:dp[1]=1,dp[2]=1

4.遍历顺序:后面的项依赖于前面的项,故从前向后遍历

class Solution {
public:
    int fib(int n) {
    int dp[35];
    dp[1]=1;dp[2]=1;
    for(int i=3;i<=n;i++)
    {
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
    }
};

2.爬楼梯

1.dp[i]含义:爬上第i阶楼梯的方法数

2.递推公式:dp[i]=dp[i-1]+dp[i-2]

3.初始化:dp[1]=1,dp[2]=2

4.遍历顺序:后面的项依赖于前面的项,故从前向后遍历

class Solution {
public:
    int climbStairs(int n) {
    int dp[50];
    dp[1]=1;dp[2]=2;
    for(int i=3;i<=n;i++)
    dp[i]=dp[i-1]+dp[i-2];
    return dp[n];
    }
};

3.使用最小花费爬楼梯

1.dp[i]含义:爬上第i阶楼梯的最小花费

2.递推公式:dp[i]=min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]);

3.初始化:dp[0]=0,dp[1]=0

4.遍历顺序:后面的项依赖于前面的项,故从前向后遍历

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
    int n=cost.size();
    int dp[1005];
    dp[0]=0;dp[1]=0;
    for(int i=2;i<=n;i++)
    {
        dp[i]=min(dp[i-2]+cost[i-2],dp[i-1]+cost[i-1]);
    }
    return dp[n];
    }
};
文章来源:https://blog.csdn.net/2301_79076926/article/details/135734743
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。