使用最小花费爬楼梯 动态规划初理解


该题是动态规划入门程度,但最开始做的时候还是无从下手。
我觉得卡哥给的步骤很重要:
确定dp数组(dp table)以及下标的含义
确定递推公式
dp数组如何初始化
确定遍历顺序
举例推导dp数组

首先明确dp数组(dp table)以及下标的含义很重要,最开始做这道题的时候,设了dp但不知道是代表什么。
一般题目就假设dp[sz]为最终结果,因此可以间接懂得dp[i]就是到i层的花费。
知道这一步就可以推得递归函数了。

完整代码:

点击查看代码
class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
int sz=cost.size();
if(sz==0){return 0;}
if(sz==1){return cost[0];}
vector<int>dp(sz+1);
dp[0]=0;
dp[1]=0;
for(int i=2;i<=sz;i++){
    int num1=dp[i-1]+cost[i-1];
    int num2=dp[i-2]+cost[i-2];
    dp[i]=min(num1,num2);
}
return dp[sz];
    }
};
posted @ 2024-01-19 22:14  yun-che  阅读(17)  评论(0)    收藏  举报