第三十八天 | 動(dòng)態(tài)規(guī)劃 part01

前置知識(shí)

文字講解:動(dòng)態(tài)規(guī)劃理論基礎(chǔ)

視頻講解:https://www.bilibili.com/video/BV13Q4y197Wg

動(dòng)態(tài)規(guī)劃-總結(jié)大綱1.jpg

做題步驟:

  • 找問題的最好方式就是把dp數(shù)組打印出來,搞清楚每一個(gè)值代表的含義
  • 遞推公式
  • dp數(shù)組初始化运敢、遍歷順序

509. 斐波那契數(shù)

題目鏈接/文字講解:斐波那契數(shù)

視頻講解:https://www.bilibili.com/video/BV1f5411K7mo

題設(shè):斐波那契數(shù)(通常用 F(n) 表示)形成的序列稱為 斐波那契數(shù)列 盯质。該數(shù)列由 01 開始,后面的每一項(xiàng)數(shù)字都是前面兩項(xiàng)數(shù)字的和刨沦。也就是:

F(0) = 0,F(xiàn)(1) = 1
F(n) = F(n - 1) + F(n - 2)膘怕,其中 n > 1

給定 n 想诅,請(qǐng)計(jì)算 F(n)

思路:動(dòng)規(guī)五部曲:

要用一個(gè)一維dp數(shù)組來保存遞歸的結(jié)果

1.確定dp數(shù)組以及下標(biāo)的含義-dp[i]的定義為:第i個(gè)數(shù)的斐波那契數(shù)值是dp[i]

2.確定遞推公式-狀態(tài)轉(zhuǎn)移方程 dp[i] = dp[i - 1] + dp[i - 2];

3.dp數(shù)組如何初始化

4.確定遍歷順序-dp[i]是依賴 dp[i - 1] 和 dp[i - 2]岛心,那么遍歷的順序一定是從前到后遍歷的

5.舉例推導(dǎo)dp數(shù)組

class Solution {
    public int fib(int n) {
        if (n <= 1) return n;
        int[] dp = new int[n + 1];
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i < dp.length; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

70. 爬樓梯

題目鏈接/文字講解:爬樓梯

視頻講解:https://www.bilibili.com/video/BV1f5411K7mo

題設(shè):假設(shè)你正在爬樓梯来破。需要 n 階你才能到達(dá)樓頂。

每次你可以爬 12 個(gè)臺(tái)階忘古。你有多少種不同的方法可以爬到樓頂呢徘禁?

思路:動(dòng)規(guī)五部曲:

定義一個(gè)一維數(shù)組來記錄不同樓層的狀態(tài)

1.確定dp數(shù)組以及下標(biāo)的含義-dp[i]: 爬到第i層樓梯,有dp[i]種方法

2.確定遞推公式-dp[i] = dp[i - 1] + dp[i - 2] 髓堪。

3.dp數(shù)組如何初始化-再回顧一下dp[i]的定義:爬到第i層樓梯送朱,有dp[i]種方法。

題目中說了n是一個(gè)正整數(shù)干旁,題目根本就沒說n有為0的情況驶沼。

只初始化dp[1] = 1,dp[2] = 2争群,然后從i = 3開始遞推回怜,這樣才符合dp[i]的定義。

4.確定遍歷順序-從遞推公式dp[i] = dp[i - 1] + dp[i - 2];中可以看出换薄,遍歷順序一定是從前向后遍歷的

5.舉例推導(dǎo)dp數(shù)組

20210105202546299.png
class Solution {
    public int climbStairs(int n) {
        if (n <= 2) return n;
        int[] dp = new int[n + 1];
        dp[1] = 1;
        dp[2] = 2;
        for (int i = 3; i < dp.length; i++) {
            dp[i] = dp[i - 1] + dp[i - 2];
        }
        return dp[n];
    }
}

和斐波那契基本沒區(qū)別玉雾。當(dāng)然,還可以拓展一下专控,若是每步可走1-m怎么辦抹凳,這種情況其實(shí)和背包問題相似。

746. 使用最小花費(fèi)爬樓梯

題目鏈接/文字講解:使用最小花費(fèi)爬樓梯

視頻講解:https://www.bilibili.com/video/BV16G411c7yZ

題設(shè):給你一個(gè)整數(shù)數(shù)組 cost 伦腐,其中 cost[i] 是從樓梯第 i 個(gè)臺(tái)階向上爬需要支付的費(fèi)用赢底。一旦你支付此費(fèi)用,即可選擇向上爬一個(gè)或者兩個(gè)臺(tái)階。

你可以選擇從下標(biāo)為 0 或下標(biāo)為 1 的臺(tái)階開始爬樓梯幸冻。請(qǐng)你計(jì)算并返回達(dá)到樓梯頂部的最低花費(fèi)屯烦。

思路:動(dòng)規(guī)五部曲:

1.確定dp數(shù)組以及下標(biāo)的含義-dp[i]: 爬到第i層樓梯贩耐,消耗的最少費(fèi)用津函。

2.確定遞推公式-當(dāng)前為第i個(gè)臺(tái)階张抄,爬過它所需要的最少消耗為其本身消耗+min(第i-1個(gè)臺(tái)階消耗,第i-2個(gè)臺(tái)階消耗)。

3.dp數(shù)組如何初始化-再回顧一下dp[i]的定義:dp[0]=cost[0],dp[1]=cost[1]碑定。(可以選擇從0/1開始)

4.確定遍歷順序-從下往上爬流码,遍歷順序一定是從前向后遍歷的。不需要考慮數(shù)組長度為0延刘,1的情況漫试。

5.舉例推導(dǎo)dp數(shù)組。

class Solution {
    public int minCostClimbingStairs(int[] cost) {
        if (cost.length == 2) return Math.min(cost[1], cost[0]);
        int[] dp = new int[cost.length];
        dp[0] = cost[0];
        dp[1] = cost[1];
        for (int i = 2; i < dp.length; i++) {
            dp[i] = Math.min(dp[i - 1], dp[i - 2]) + cost[i];
        }
        return Math.min(dp[cost.length - 1], dp[cost.length - 2]);
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末碘赖,一起剝皮案震驚了整個(gè)濱河市驾荣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌普泡,老刑警劉巖播掷,帶你破解...
    沈念sama閱讀 222,946評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撼班,居然都是意外死亡歧匈,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,336評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門权烧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來眯亦,“玉大人,你說我怎么就攤上這事般码。” “怎么了乱顾?”我有些...
    開封第一講書人閱讀 169,716評(píng)論 0 364
  • 文/不壞的土叔 我叫張陵板祝,是天一觀的道長。 經(jīng)常有香客問我走净,道長券时,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,222評(píng)論 1 300
  • 正文 為了忘掉前任伏伯,我火速辦了婚禮橘洞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘说搅。我一直安慰自己炸枣,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,223評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著适肠,像睡著了一般霍衫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侯养,一...
    開封第一講書人閱讀 52,807評(píng)論 1 314
  • 那天敦跌,我揣著相機(jī)與錄音,去河邊找鬼逛揩。 笑死柠傍,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辩稽。 我是一名探鬼主播携兵,決...
    沈念sama閱讀 41,235評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搂誉!你這毒婦竟也來了徐紧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,189評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤炭懊,失蹤者是張志新(化名)和其女友劉穎并级,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體侮腹,經(jīng)...
    沈念sama閱讀 46,712評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡嘲碧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,775評(píng)論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了父阻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片愈涩。...
    茶點(diǎn)故事閱讀 40,926評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖加矛,靈堂內(nèi)的尸體忽然破棺而出履婉,到底是詐尸還是另有隱情,我是刑警寧澤斟览,帶...
    沈念sama閱讀 36,580評(píng)論 5 351
  • 正文 年R本政府宣布毁腿,位于F島的核電站,受9級(jí)特大地震影響苛茂,放射性物質(zhì)發(fā)生泄漏已烤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,259評(píng)論 3 336
  • 文/蒙蒙 一妓羊、第九天 我趴在偏房一處隱蔽的房頂上張望胯究。 院中可真熱鬧,春花似錦躁绸、人聲如沸裕循。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,750評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽费韭。三九已至茧球,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間星持,已是汗流浹背抢埋。 一陣腳步聲響...
    開封第一講書人閱讀 33,867評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留督暂,地道東北人揪垄。 一個(gè)月前我還...
    沈念sama閱讀 49,368評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像逻翁,于是被迫代替她去往敵國和親饥努。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,930評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容