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

鏈接:
很特別的一個動態(tài)規(guī)劃入門教程
動態(tài)規(guī)劃與貪心算法的區(qū)別與聯(lián)系

那么遇到問題如何用動態(tài)規(guī)劃去解決呢?根據(jù)上面的分析我們可以按照下面的步驟去考慮:
1、構(gòu)造問題所對應的過程。
2、思考過程的最后一個步驟,看看有哪些選擇情況。
3、找到最后一步的子問題,確保符合“子問題重疊”,把子問題中不相同的地方設(shè)置為參數(shù)。
4、使得子問題符合“最優(yōu)子結(jié)構(gòu)”。
5、找到邊界,考慮邊界的各種處理方式。
6、確保滿足“子問題獨立”,一般而言,如果我們是在多個子問題中選擇一個作為實施方案,而不會同時實施多個方案,那么子問題就是獨立的。
7、考慮如何做備忘錄。
8、分析所需時間是否滿足要求。
9、寫出轉(zhuǎn)移方程式。

   有一書店引進了一套書,共有3卷,每卷書定價是60元,書店為了搞促銷,推出一個活動,活動如下:
  
   如果單獨購買其中一卷,那么可以打9.5折。
   如果同時購買兩卷不同的,那么可以打9折。
   如果同時購買三卷不同的,那么可以打8.5折。
  
   如果小明希望購買第1卷x本,第2卷y本,第3卷z本,那么至少需要多少錢呢?(x、y、z為三個已知整數(shù))。

   當然,這道題完全可以不用動態(tài)規(guī)劃來解,但是現(xiàn)在我們是要學習動態(tài)規(guī)劃,因此請想想如何用動態(tài)規(guī)劃來做?

   答案:
   1、過程為一次一次的購買,每一次購買也許只買一本(這有三種方案),或者買兩本(這也有三種方案),或者三本一起買(這有一種方案),最后直到買完所有需要的書。
   2、最后一步我必然會在7種購買方案中選擇一種,因此我要在7種購買方案中選擇一個最佳情況。
   3、子問題是,我選擇了某個方案后,如何使得購買剩余的書能用最少的錢?并且這個選擇不會使得剩余的書為負數(shù)。母問題和子問題都是給定三卷書的購買量,求最少需要用的錢,所以有“子問題重疊”,問題中三個購買量設(shè)置為參數(shù),分別為i、j、k。
   4、的確符合。
   5、邊界是一次購買就可以買完所有的書,處理方式請讀者自己考慮。
   6、每次選擇最多有7種方案,并且不會同時實施其中多種,因此方案的選擇互不影響,所以有“子問題獨立”。
   7、我可以用minMoney[j][k]來保存購買第1卷i本,第2卷j本,第3卷k本時所需的最少金錢。
   8、共有x * y * z 個問題,每個問題面對7種選擇,時間為:O( x * y * z * 7) =   O( x * y * z )。
   9、用函數(shù)MinMoney(i,j,k)來表示購買第1卷i本,第2卷j本,第3卷k本時所需的最少金錢,那么有:
           MinMoney(i,j,k)=min(s1,s2,s3,s4,s5,s6,s7),其中s1,s2,s3,s4,s5,s6,s7分別為對應的7種方案使用的最少金錢:
           s1 = 60 * 0.95 + MinMoney(i-1,j,k)
           s2 = 60 * 0.95 + MinMoney(i,j-1,k)
           s3 = 60 * 0.95 + MinMoney(i,j,k-1)
           s4 = (60 + 60) * 0.9 + MinMoney(i-1,j-1,k)
           s5 = (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
           s6 = (60 + 60) * 0.9 + MinMoney(i-1,j,k-1)
           s7 = (60 + 60 + 60) * 0.85 + MinMoney(i-1,j-1,k-1)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 今天在網(wǎng)上看到一個講動態(tài)規(guī)劃的文章,是以01背包為例的,這文章和書上的講解非常不一樣,令我眼前一亮,于是轉(zhuǎn)載一下下...
    ShadowGlint閱讀 2,144評論 1 42
  • 動態(tài)規(guī)劃(Dynamic Programming) 本文包括: 動態(tài)規(guī)劃定義 狀態(tài)轉(zhuǎn)移方程 動態(tài)規(guī)劃算法步驟 最長...
    廖少少閱讀 3,659評論 0 18
  • 《算法導論》這門課的老師是黃劉生和張曙,兩位都是老人家了,代課很慢很沒有激情,不過這一章非常有意思。更多見:iii...
    mmmwhy閱讀 5,470評論 5 31
  • 樹形動態(tài)規(guī)劃,顧名思義就是樹+DP,先分別回顧一下基本內(nèi)容吧:動態(tài)規(guī)劃:問題可以分解成若干相互聯(lián)系的階段,在每一個...
    Mr_chong閱讀 1,603評論 0 2
  • 動態(tài)規(guī)劃學習-無資料 理論解釋http://www.cnblogs.com/steven_oyj/archive/...
    RavenX閱讀 1,123評論 0 2

友情鏈接更多精彩內(nèi)容