貪心和動規的difference

2021-06-22 23:06:05 字數 2029 閱讀 1675

很多同學在做動規題的時候,很容易做成貪心,的確,動規和貪心是很相近的,在很多時候,動規和貪心沒有明顯的界限,反而在很多時候,我們需要使用貪心的思想,對動規進行優化,不過這也就導致了很多同學分不清什麼題是動規,什麼題是貪心。    

現在我們來回憶一下,動規的思想是什麼,以前乙個或者多個狀態的最優值,加上現在這個狀態的最優解,在其中取得當前的最優解,再層層遞推,得到最終答案。    

那麼貪心呢?貪心的思想是由區域性的最優解進行組合,使用分治的思想,區域性的最優解組合起來就得到了總得最優解。   

仔細對比兩種思想,你發現兩者之間有什麼差別了嗎?

沒錯,在貪心中,每乙個區域性的最優解之間是沒有任何聯絡的,我們可以分開同時求解,而在動態規劃中,我們必須要應用前面的階段中的最優值,才可以得到當前的最優值。

所以在區別動歸和貪心的時候,關鍵就是:我們在得到當前最優解的時候,需不需要使用前面的階段中的得到的值,如果不需要,那就是貪心;如果需要,就是動歸。下面我舉一道題來說明,這是非常基礎的一道題,每乙個人都見過,數字三角形。    現在有乙個數字三角形,我們從最上方走到最下方。比如下面這個數字三角形   7 

3  8 

8  1  0 

2  7  4  4 

4  5  2  6  5  

如果我不給出乙個點只能走到左下或者右下這個限制條件,我們可以從這一層的乙個點走到下一層的任意乙個點,那麼我們發現這道題就是乙個很簡單的貪心,取出每一排的最大的數字相加就是我們的和。 如果加上了那個條件呢???  那麼我們就必須使用動態規劃,方程很簡單f[i][j]=max(f[i-1][j-1],f[i-1][j])+a[i][j];  為什麼加上乙個條件後,就變成了動態規劃呢??   因為我們加上了這個條件之後,我們走到當前這乙個層的時候,   

最後我們來回憶一下當初同學們都以為是貪心的一道題,田忌賽馬:  

田忌賽馬    

【問題描述】  中國古代的歷史故事「田忌賽馬」是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩**,如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢?  

【輸入格式】   第一行為乙個正整數n (n <= 2000) ,表示雙方馬的數量。 第二行有n個整數表示田忌的馬的速度。 第三行的n個整數為齊王的馬的速度。  

【輸出格式】  僅有一行,為田忌賽馬可能贏得的最多的錢,結果有可能為負。 

【輸入樣例】   3 

92 83 71 

95 87 74 

【輸出樣例】  

200  

當初同學們在思考這道題的時候大都認為這是一道貪心,自己的馬如果能勝,就用最大的一匹取勝,如果不能,就用最差的那匹取輸,這種思想看似有理,但是有乙個很簡單的道理,存在平局。  所以贏得多,可能輸得越多,贏得少,可能輸得少。  所以,簡單的相加不能夠得到我們的最優解,我們發現這種策略存在明顯的動態規劃特徵。  

由於齊王的馬的出場順序是確定的,所以前面的馬的安排不會影響到後面的對決,前面得到的最優解加上現在對決的最優解就是當前的最優解,最優子問題,無後效性,都存在,所以這一定是一道動規。  線性?區間?揹包?   很明顯,這是一道區間的問題,i到j這乙個區間的最優值是不是其中的一匹馬去對戰齊王的第j-i匹馬的結果加上剩下的馬去對戰齊王的j-i-1匹馬的最大值的最大值。    那麼貪心就完全沒用了嗎???   我說過貪心可以優化動規,因為動規本來就滿足最優子問題結構,使用貪心的思想,在求最優子問題的時候,可以省下不少的時間. 

在這道題中,當我們在i到j這個區間內選派馬去和齊王的j-i這匹馬對戰的時候,我們使用前面得到的貪心策略, 1. 用最大的馬 2. 用最小的馬  我說過,貪心在一次的決策中可以保證是最優的  所以無論如何,這樣的策略在這一次決策中一定是最優的,這樣我們就使用貪心策略清楚地解決了動規的最優子問題。  f[i][j]代表田忌的第i到第j匹馬對戰齊王的前j-i匹馬得到的最大值.  f[i][j]=max;   

最後再次重申一句話:  貪心是區域性的最優解,動規是整體的最優解

貪心分治動規總結

概念看不懂是正常的,看懂了才不正常。有個小建議 先看一下概念,看完之後肯定感覺似懂非懂,沒關係去做題實踐出真知,每個型別做個8 9題,在回過頭來看概念會發現概念說的好像真是那麼回事兒,接著再去做題反覆練習就明白了。最優子結構 原問題的解包含子問題的解。子問題即規模更小的問題 例如,a b c,ab ...

動規中的貪心思想 田忌賽馬

中國古代的歷史故事 田忌賽馬 是為大家所熟知的。話說齊王和田忌又要賽馬了,他們各派出n匹馬,每場比賽,輸的一方將要給贏的一方200兩 如果是平局的話,雙方都不必拿出錢。現在每匹馬的速度值是固定而且已知的,而齊王出馬也不管田忌的出馬順序。請問田忌該如何安排自己的馬去對抗齊王的馬,才能贏取最多的錢?第一...

貪心 分治 與 動規 異同點分析

兩個概念 重疊子問題 如果乙個問題可以被分為若干個子問題,且這些子問題會重複出現,那麼就稱這個問題擁有重疊子問題 最優子結構 如果乙個問題的最優解可以由其子問題的最優解有效地構造出來,那麼稱這個問題擁有最優子結構 三者各自特點 分治 分而治之 將原問題劃分成若干個規模較小而結構與原問題相同或相似的子...