小工具知识网

当前位置: 首页 > 行业知识 > 动态规划——详解斐波那契数列模型(爬楼梯最小花费和解码方法)

行业知识

动态规划——详解斐波那契数列模型(爬楼梯最小花费和解码方法)

2026-10-29 04:09:00 来源:互联网转载

         一、快速上手dp表的建立和求得状态转移方程

��      我将此类动态规划问题称为建立dp表问题,方法较为固定,只要走好:

1:建立dp表;

2:初始化(是为了考虑在填表阶段不会出现越界的情况,并且初始化的是dp表的值);

3:填表;

4:返回值(只要主意好要求返回的是表中最后一个数据还是前一个数据就ok);

这四步的总结适用于各类斐波那契额数列模型的问题,我将用以下两个问题分别用两种解题思路来进行剖析。

      对于此题,我们来分析他的状态,是让求最后下标为i的位置的总花费。

   第三步,我们来书写状态转移方程:用之前或之后的状态来推导出dp[i]的值,从而得到这个状态转移方程。

    理论上,只要我们能求出这类题型的所有状态转移方程,我们就可以求出关于这类所有的解决方案。

   第四步,其次就是初始化 填表顺序,以及返回值。

    该题通过观察状态转移方程,求出dp[i]就要求出dp[i-1]和dp[i-2]中的最小值,那么就是要从左往右来求出dp[i]的结果。

    最后就是返回值,因为该题说明是求小标为n的最小花费,那么就是这个dp表的最后一个下标,那么就是返回 dp[n];

    接下来就是代码的编写情况:

class Solution {public:    int minCostClimbingStairs(vector& cost) {        //1.建立dp表        //2.初始化        //3.填表        //4.返回值        int n=cost.size();        vector dp(n+1);        for(int i=2;i=0;i--)        {            dp[i]=cost[i]+min(dp[i+1],dp[i+2]);        }        return min(dp[0],dp[1]);    }};

二、(91、)解码方法

我们还是一样,首先观察题意,进行

1、状态表示;2、状态转移表达式的书写;3、初始化;4、确定填表顺序;5、确定返回值

    

class Solution {public:    int numDecodings(string s) {        //1.建立dp表        //2.初始化//就是为了不在填表的时候越界 会用到v[i-1] 和 v[i-2]的值 v[1] 有一种情况就是都能单独解码,但是不能同时解码,算一种情况        //3.填表        //4.返回值        int n=s.size();        vector v(n);        //初始化 一直以来初始化都是初始化v[1]与v[0]这两个值        v[0]=s[0]!='0';        if(n==1)        return v[0];        //如果第一个位置和第二个位置都能单独解码        if(s[0]!='0'&&s[1]!='0')        v[1]+=1;        //如果第一和第二个位置能组合解码        int t=(s[0]-'0')*10+s[1]-'0';        if(t>=10&&t

上一篇:方舟服务器怎么授权别人?

下一篇:掌握新建图层快捷键,轻松成为设计高手!