動(dòng)態(tài)規(guī)劃

爬樓梯問題

1. 題目

爬樓梯每次可以爬1階或兩階践宴,問到n階有多少種方法

2. 思路

狀態(tài):dp[i]表示到第i階的走法
狀態(tài)轉(zhuǎn)移方程:dp[i] = dp[i-1] + dp[i-2]
邊界狀態(tài)值:dp[1] = 1, dp[2] = 2

3. 代碼

int climbStairs(int n)
{
    std::vector<int> dp(n+3, 0);
    dp[1] = 1;
    dp[2] = 2;
    for (int i = 3; i <= n; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    return dp[n];
}

打家劫舍

1. 題目

一組相鄰的n個(gè)房屋,每個(gè)房屋有不等數(shù)量的財(cái)寶错负,盜賊想要盜取財(cái)物婿着,但是從相鄰的房屋盜取會(huì)出發(fā)警報(bào)沿侈,問在不觸發(fā)警報(bào)的情況下衣形,最多可以盜取多少財(cái)寶翎苫?

2. 思路

  • 狀態(tài):dp[i]表示前i個(gè)房間能獲得的最大財(cái)寶
  • 狀態(tài)轉(zhuǎn)移方程:
    如果選擇第i個(gè)房間,dp[i] = dp[i-2] + dp[i]铁蹈;不選擇第i個(gè)房間宽闲,dp[i] = dp[i-1];
    所以dp[i]的最優(yōu)解為dp[i] = max(dp[i-2] + dp[i], dp[i-1])
  • 邊界狀態(tài)值:
    dp[0] = num[0],
    dp[1] = max(num[0], num[1])

3. 代碼

int rot(std::vector<int> &nums)
{
    if (nums.size() == 0) {
        return 0;
    }
    if (nums.size() == 1) {
        return nums[0];
    }
    std::vector<int> dp(nums.size(), 0);
    dp[0] = nums[0];
    dp[1] = std::max(nums[0], nums[1]);
    for (int i = 2; i < nums.size(); i++) {
        dp[i] = std::max(dp[i-1], dp[i-2]+nums[i]);
    }
    return dp[nums.size() - 1 ];
}

最大子段和

1. 題目

給定一個(gè)數(shù)組握牧,求這個(gè)數(shù)組的連續(xù)子數(shù)組中,最大的那一段的和

2. 思路

  • 狀態(tài):dp[i] 表示以第i個(gè)數(shù)字結(jié)尾的最大子段和
  • 狀態(tài)轉(zhuǎn)移方程
    若dp[i-1] > 0, dp[i] = dp[i-1] + num[i]
    若dp[i-1] < 0, dp[i] = num[i]
    所以:dp[i] = max(dp[i-1] + num[i], num[i])
  • 邊界狀態(tài)值:dp[0] = num[0]

3. 代碼

int maxSubArray(std::vector<int> &num)
{
    std::vector<int> dp(num.size(), 0);
    dp[0] = num[0];
    int max_res = dp[0];

    for (int i = 1; i < num.size(); i++) {
        dp[i] = std::max(dp[i - 1] + num[i], num[i]);  // 狀態(tài)轉(zhuǎn)移方程
        if (max_res < dp[i]) {
            max_res = dp[i];
        }
    }
    return max_res;
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末娩梨,一起剝皮案震驚了整個(gè)濱河市沿腰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌狈定,老刑警劉巖颂龙,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異纽什,居然都是意外死亡措嵌,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門芦缰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來企巢,“玉大人,你說我怎么就攤上這事让蕾±斯妫” “怎么了?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵笋婿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我庇配,道長(zhǎng)讨永,這世上最難降的妖魔是什么揭糕? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮吏口,結(jié)果婚禮上产徊,老公的妹妹穿的比我還像新娘舟铜。我一直安慰自己,他們只是感情好痊夭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布膝宁。 她就那樣靜靜地躺著员淫,像睡著了一般拴事。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天捂齐,我揣著相機(jī)與錄音奠宜,去河邊找鬼娩嚼。 笑死榴都,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拴驮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼唆鸡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼枣察!你這毒婦竟也來了争占?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤序目,失蹤者是張志新(化名)和其女友劉穎臂痕,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體猿涨,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡握童,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了叛赚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片澡绩。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡稽揭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出英古,到底是詐尸還是另有隱情淀衣,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布召调,位于F島的核電站膨桥,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏唠叛。R本人自食惡果不足惜只嚣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艺沼。 院中可真熱鬧册舞,春花似錦、人聲如沸障般。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挽荡。三九已至藐石,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間定拟,已是汗流浹背于微。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留青自,地道東北人株依。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像延窜,于是被迫代替她去往敵國(guó)和親恋腕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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

  • 動(dòng)態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動(dòng)態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動(dòng)態(tài)規(guī)劃算法步驟 最長(zhǎng)...
    廖少少閱讀 3,283評(píng)論 0 18
  • 樹形動(dòng)態(tài)規(guī)劃需曾,顧名思義就是樹+DP吗坚,先分別回顧一下基本內(nèi)容吧:動(dòng)態(tài)規(guī)劃:?jiǎn)栴}可以分解成若干相互聯(lián)系的階段,在每一個(gè)...
    Mr_chong閱讀 1,486評(píng)論 0 2
  • 分治方法 將問題劃分成互不相交的子問題 遞歸地求解子問題 將子問題的解組合起來 動(dòng)態(tài)規(guī)劃(兩個(gè)要素:最優(yōu)子結(jié)構(gòu)呆万、子...
    superlj666閱讀 500評(píng)論 0 0
  • (歡迎轉(zhuǎn)載商源,但請(qǐng)注明出處并附帶鏈接)算法好久沒復(fù)習(xí)了,今天看見一妹子在辦公室刷Leetcode谋减,頓時(shí)我也來了興趣牡彻,...
    Nick_Zuo閱讀 665評(píng)論 0 3
  • 回溯算法 回溯法:也稱為試探法,它并不考慮問題規(guī)模的大小,而是從問題的最明顯的最小規(guī)模開始逐步求解出可能的答案庄吼,并...
    fredal閱讀 13,658評(píng)論 0 89