本文主要是介绍动态规划3:746. 使用最小花费爬楼梯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
动态规划解题步骤:
1.确定状态表示:dp[i]是什么
2.确定状态转移方程:dp[i]等于什么
3.初始化:确保状态转移方程不越界
4.确定填表顺序:根据状态转移方程即可确定填表顺序
5.确定返回值
题目链接:746. 使用最小花费爬楼梯 - 力扣(LeetCode)
题解1:
1.状态表示:dp[i]表示到达下标为i台阶的最小花费
2.状态转移方程:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
3.初始化:初始化dp[0]=0、dp[1]=0
4.填表顺序:从左向右
5.返回值:dp[n](n为台阶数)
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {size_t n=cost.size();//无需处理边界条件,n默认>=2//创建dp表vector<int> dp(n+1);//初始化dp[0]=dp[1]=0;//填表for(int i=2;i<=n;++i)dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);//返回值return dp[n];}
};
题解2:
1.状态表示:dp[i]表示从下标为i的台阶出发到达楼顶的最小花费
2.状态转移方程:dp[i]=cost[i]+min(dp[i+1],dp[i+2])
3.初始化:初始化dp[n-1]=cost[n-1]、dp[n-2]=cost[n-2]
4.填表顺序:从右向左
5.返回值:min(dp[0],dp[1])
class Solution {
public:int minCostClimbingStairs(vector<int>& cost) {size_t n=cost.size();//无需处理边界条件//创建dp表vector<int> dp(n);//初始化dp[n-1]=cost[n-1];dp[n-2]=cost[n-2];//填表for(int i=n-3;i>=0;--i)dp[i]=cost[i]+min(dp[i+1],dp[i+2]);//返回值return min(dp[0],dp[1]);}
};
这篇关于动态规划3:746. 使用最小花费爬楼梯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!