国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

算法Day38 | 動態(tài)規(guī)劃,509. 斐波那契數(shù), 70. 爬樓梯, 746. 使用最小花費爬樓梯

這篇具有很好參考價值的文章主要介紹了算法Day38 | 動態(tài)規(guī)劃,509. 斐波那契數(shù), 70. 爬樓梯, 746. 使用最小花費爬樓梯。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

動態(tài)規(guī)劃

動態(tài)規(guī)劃是一種解決問題的算法思想。它通常用于優(yōu)化問題,其中要求找到一個最優(yōu)解或最大化(最小化)某個目標(biāo)函數(shù)。

動態(tài)規(guī)劃的核心思想是將問題分解成更小的子問題,并通過存儲子問題的解來避免重復(fù)計算。這樣,可以通過解決子問題來構(gòu)建原始問題的解。動態(tài)規(guī)劃通常適用于具有重疊子問題和最優(yōu)子結(jié)構(gòu)特性的問題。

動態(tài)規(guī)劃的一般步驟如下:

  1. 確定dp數(shù)組以及下標(biāo)的含義
  2. 確定遞推公式
  3. dp數(shù)組初始化
  4. 確定遍歷順序
  5. 舉例推導(dǎo)dp數(shù)組

動態(tài)規(guī)劃數(shù)學(xué)歸納法的異同:

動態(tài)規(guī)劃 數(shù)學(xué)歸納法
目的 解決優(yōu)化問題 證明命題的正確性
解決方法 將問題劃分為子問題,通過存儲子問題的解避免重復(fù)計算 將問題歸納到更小的情況進行證明
焦點 求解問題的過程 問題的正確性證明
應(yīng)用領(lǐng)域 計算機科學(xué)、運籌學(xué)、經(jīng)濟學(xué)等 數(shù)學(xué)、邏輯學(xué)等
相同之處 都通過將問題分解為更小的部分來解決 都需要基于已知情況來推導(dǎo)出新的結(jié)論

509. 斐波那契數(shù)

題目鏈接:509. 斐波那契數(shù)

class Solution {
public:
    int fib(int n) {
        vector<int> dp{0, 1};
        dp.resize(n + 1);
        for (int i = 2; i < n + 1; ++i) {
            dp[i] = dp[i - 2] + dp[i - 1];
        }
        return dp.back();
    }
};

根據(jù)公式 F ( n ) = F ( n ? 1 ) + F ( n ? 2 ) F(n) = F(n - 1) + F(n -2) F(n)=F(n?1)+F(n?2),本題其實只需要維護兩個變量就可以求出,稱之為滾動數(shù)組

class Solution {
public:
    int fib(int n) {
        if (n <= 1) return n;
        int val1 = 0, val2 = 1;
        while(n-- >= 2) {
            int sum = val2 + val1;
            val1 = val2;
            val2 = sum;
        }
        return val2;
    }
};

動態(tài)規(guī)劃中的滾動數(shù)組是一種空間優(yōu)化技巧,通常用于解決空間復(fù)雜度較高的動態(tài)規(guī)劃問題。滾動數(shù)組通過使用一維數(shù)組來代替二維數(shù)組的一部分或全部,從而減少空間復(fù)雜度。在動態(tài)規(guī)劃的遞推過程中,每一個狀態(tài)只與之前的一個或幾個狀態(tài)有關(guān),因此只需要用一維數(shù)組來保存這些狀態(tài)的值,而不需要用二維數(shù)組保存所有狀態(tài)值。當(dāng)計算完當(dāng)前狀態(tài)后,可以覆蓋掉前面的狀態(tài)值,從而實現(xiàn)滾動數(shù)組的效果。

例如,求解斐波那契數(shù)列的動態(tài)規(guī)劃實現(xiàn)通常使用滾動數(shù)組。在計算當(dāng)前狀態(tài)值時,只需要用兩個變量來分別保存前兩個狀態(tài)的值,而不需要使用一個數(shù)組來保存所有狀態(tài)值。每次計算完當(dāng)前狀態(tài)值后,將保存前一個狀態(tài)值的變量的值更新為當(dāng)前狀態(tài)值,將保存前兩個狀態(tài)值的變量的值更新為保存前一個狀態(tài)值的變量的值,即可實現(xiàn)滾動數(shù)組。

使用滾動數(shù)組可以大大減少動態(tài)規(guī)劃算法的空間復(fù)雜度,但同時也可能會影響程序的可讀性和可維護性,因為使用滾動數(shù)組通常需要更多的變量和復(fù)雜的變量更新操作。因此,在使用滾動數(shù)組時需要權(quán)衡空間和時間復(fù)雜度與程序可讀性和可維護性之間的關(guān)系,選擇最優(yōu)的算法實現(xiàn)方式。


70. 爬樓梯

題目鏈接:70. 爬樓梯
1個臺階,有1種方法;2個臺階,有2種方法;3個臺階,有1+2種方法。

3個臺階就是1個臺階和2個臺階的總和。為什么?因為題目就讓邁1個或2個臺階,因此到3階,從1階邁兩步,從2階邁一步,因此是1階和2階的總和。這就是將問題分解成更小的子問題,并通過存儲子問題的解來避免重復(fù)計算

同理,4個臺階,通過3階邁一步,2階邁兩步,有2+3種方法。
… …

dp 數(shù)組的含義:到達第 i 階,有 dp[i] 種方法
遞推公式:dp[i] = dp[i -1] + dp[i - 2]
初始化:dp[1] = 1; dp[2] = 2dp[0]沒有意義,但是為了滿足遞推公式,可以初始化為1)
遍歷順序:從前向后

class Solution {
public:
    int climbStairs(int n) {
        vector<int> dp{1, 1, 2};
        dp.resize(n + 1);
        for (int i = 3; i < n + 1; ++i) {
            dp[i] = dp[i - 2] + dp[i - 1];
        }
        return dp.back();
    }
};

當(dāng)然,因為是斐波那契數(shù)列,也可以維護只兩個變量來完成。


746. 使用最小花費爬樓梯

題目鏈接:746. 使用最小花費爬樓梯
dp 數(shù)組的含義:到達第 i 階,所需要的花費為 dp[i]
遞推公式:dp[i] = min(dp[i -1] + cost[i - 1], dp[i - 2] + cost[i - 2])
初始化:根據(jù)題意可知dp[0] = 0; dp[1] = 0
遍歷順序:從前向后文章來源地址http://www.zghlxwxcb.cn/news/detail-487664.html

class Solution {
public:
    int minCostClimbingStairs(vector<int>& cost) {
        vector<int> dp{0, 0};
        dp.resize(cost.size() + 1);
        for (int i = 2; i < cost.size() + 1; ++i) {
            dp[i] = min(dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]);
        }
        return dp.back();
    }
};

到了這里,關(guān)于算法Day38 | 動態(tài)規(guī)劃,509. 斐波那契數(shù), 70. 爬樓梯, 746. 使用最小花費爬樓梯的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 動態(tài)規(guī)劃之 509斐波那契數(shù)(第1道)

    動態(tài)規(guī)劃之 509斐波那契數(shù)(第1道)

    題目: 斐波那契數(shù)?(通常用? 表示)形成的序列稱為 斐波那契數(shù)列 。該數(shù)列由?0 和 1 開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和。也就是: , ,其中 n 1 給定?n ,請計算 。 題目鏈接:509. 斐波那契數(shù) - 力扣(LeetCode) 示例: 解法:

    2024年02月12日
    瀏覽(24)
  • 算法訓(xùn)練第三十八天|動態(tài)規(guī)劃理論基礎(chǔ)、509. 斐波那契數(shù) 、70. 爬樓梯 、 746. 使用最小花費爬樓梯

    算法訓(xùn)練第三十八天|動態(tài)規(guī)劃理論基礎(chǔ)、509. 斐波那契數(shù) 、70. 爬樓梯 、 746. 使用最小花費爬樓梯

    參考:https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 動態(tài)規(guī)劃是什么 動態(tài)規(guī)劃,英文:Dynamic Programming,簡稱DP,如果某一問題有很多重疊子問題,使用動態(tài)規(guī)劃是最有效的。 所以 動態(tài)規(guī)劃中每一個狀態(tài)一定是由上一個狀態(tài)推導(dǎo)出來的 ,這一

    2024年02月04日
    瀏覽(25)
  • 力扣第509題 斐波那契數(shù) 新手動態(tài)規(guī)劃(推薦參考) c++

    509. 斐波那契數(shù) 簡單 相關(guān)標(biāo)簽 遞歸? ?記憶化搜索? ?數(shù)學(xué)? ?動態(tài)規(guī)劃 斐波那契數(shù) ?(通常用? F(n) ?表示)形成的序列稱為? 斐波那契數(shù)列 ?。該數(shù)列由? 0 ?和? 1 ?開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和。也就是: 給定? n ?,請計算? F(n) ?。 示例 1: 示例 2:

    2024年02月07日
    瀏覽(28)
  • 算法刷刷刷|動態(tài)規(guī)劃篇|509.斐波那契數(shù)| 70.爬樓梯| 746.使用最小花費爬樓梯| 62.不同路徑| 63不同路徑2| 343.正數(shù)拆分 | 96.不同的二叉搜索樹

    509. 斐波那契數(shù) 斐波那契數(shù) (通常用 F(n) 表示)形成的序列稱為 斐波那契數(shù)列 。該數(shù)列由 0 和 1 開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和。也就是: F(0) = 0,F(xiàn)(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 給定 n ,請計算 F(n) 。 70.爬樓梯 746.使用最小花費爬樓梯 給你一個整數(shù)

    2023年04月23日
    瀏覽(24)
  • 【動態(tài)規(guī)劃】是泰波那契數(shù),不是斐波那契數(shù)

    【動態(tài)規(guī)劃】是泰波那契數(shù),不是斐波那契數(shù)

    Problem: 1137. 第 N 個泰波那契數(shù) 首先我們來解讀一下本題的意思?? 相信讀者在看到【泰波那契數(shù)】的時候,不禁會聯(lián)想到【斐波那契數(shù)】,它們呢是一對孿生兄弟,這個 泰波那契數(shù) 相當(dāng)于是 斐波那契數(shù) 的加強版 我們首先可以來看到這個遞推公式 Tn+3 = Tn + Tn+1 + Tn+2 ,讀者可

    2024年02月08日
    瀏覽(23)
  • 動態(tài)規(guī)劃-斐波那契數(shù)

    斐波那契數(shù)是一個很好的熟悉和理解動態(tài)規(guī)劃的例子,通過斐波那契數(shù)可以更好的理解動態(tài)規(guī)劃的精髓,動態(tài)規(guī)劃是后面的計算是如何借助于前面的計算結(jié)果來加快計算速度的。 斐波那契數(shù)和斐波那契數(shù)列其實可以看成是一道題,只不過兩題的限制性條件稍微有差別 斐波那

    2024年02月14日
    瀏覽(19)
  • 力扣 509. 斐波那契數(shù)

    力扣 509. 斐波那契數(shù)

    題目來源:https://leetcode.cn/problems/fibonacci-number/description/ ? ?C++題解1:根據(jù)題意,直接用遞歸函數(shù)。 C++題解2(來源代碼隨想錄):動態(tài)規(guī)劃。動規(guī)五部曲:這里我們要用一個一維dp數(shù)組來保存遞歸的結(jié)果。 確定dp數(shù)組以及下標(biāo)的含義:dp[i]的定義為第i個數(shù)的斐波那契數(shù)值是

    2024年02月15日
    瀏覽(21)
  • 509. 斐波那契數(shù)

    斐波那契數(shù) ?(通常用? F(n) ?表示)形成的序列稱為? 斐波那契數(shù)列 ?。該數(shù)列由? 0 ?和? 1 ?開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和。也就是: 給定? n ?,請計算? F(n) ?。 示例 1: 示例 2: 示例 3: 提示: 0 = n = 30

    2024年02月06日
    瀏覽(21)
  • 【leetcode】509. 斐波那契數(shù)(easy)

    斐波那契數(shù) (通常用 F(n) 表示)形成的序列稱為 斐波那契數(shù)列 。該數(shù)列由 0 和 1 開始,后面的每一項數(shù)字都是前面兩項數(shù)字的和。也就是: F(0) = 0,F(xiàn)(1) = 1 F(n) = F(n - 1) + F(n - 2),其中 n 1 解答 :

    2024年02月13日
    瀏覽(25)
  • 【動態(tài)規(guī)劃專欄】專題一:斐波那契數(shù)列模型--------1.第N個泰波那契數(shù)

    【動態(tài)規(guī)劃專欄】專題一:斐波那契數(shù)列模型--------1.第N個泰波那契數(shù)

    本專欄內(nèi)容為:算法學(xué)習(xí)專欄,分為優(yōu)選算法專欄,貪心算法專欄,動態(tài)規(guī)劃專欄以及遞歸,搜索與回溯算法專欄四部分。 通過本專欄的深入學(xué)習(xí),你可以了解并掌握算法。 ??博主csdn個人主頁:小小unicorn ?專欄分類:動態(tài)規(guī)劃專欄 ??代碼倉庫:小小unicorn的代碼倉庫??

    2024年02月21日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包