トピックリンク: 746. 最小コストを使用して階段を登る - LeetCode
まずトピックを分析します。
これは動的プログラミングの質問です。動的プログラミングの 5 つの部分に従ってこの質問を分析して答えることができます。
参照コード:
class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n = cost.size();
//由于我们要返回的是dp[n],所以需要开n+1个空间的dp表(数组)
vector<int> dp(n+1);
//填表前需要先初始化dp[0],dp[1]的值,以免填表时越界
dp[0]=dp[1]=0;
int i=0;
//dp[0],dp[1]已经填好了,所以dp表可以从i=2位置开始填
//记得i一定要取等于n,因为dp[n]才是到达楼顶的最低费用
for(i=2;i<=n;i++)
{
//状态转移方程,取最近一步到达dp[i]位置的两种途径的最小值
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
//最后返回dp[n]即可
return dp[n];
}
};
この動的計画法の問題の難しさは解析にあり、明確に解析できればコードは数行で書けますが、描画解析がなければコードを渡されてもできないかもしれません。それを理解するために。
さて、以上が動的計画法の問題解決プロセスです。参考になれば幸いです。何か得したと感じた方は、気を付けて注意してください。今後も動的計画法関連の情報を更新していきます。今後のトピックス、また次回お会いしましょう! !!