1. 程式人生 > >動態規劃初步

動態規劃初步

硬幣問題 coins 都是 image 計算 不同 alt mage http

湊錢問題:

題目:給一個總額amount,以及現有的錢幣面值數組coins,要求計算最少需要多少張coins中的錢幣才能湊出總額;

動態規劃是將大問題轉化為小問題,然後一步步求解出最終結果。具體到這道題,我們可以把大問題即湊amount元轉化為湊齊amout-1,amount-2等等

技術分享

當我們計算"湊5元"的時候一定要相信:湊1-4元都已經是最優結果了,同樣湊4元要相信湊1-3是最優結果。這便是動態規劃的全部:大問題轉化為小問題,每次小問題都是最優結果,最終基於這些小問題得到大問題的最優結果,各種dp問題的主要不同是大問題是如何“基於小問題”得出結果的

回到上面的圖片中,我們這道題目要求的是計算湊amount所需最少的錢幣張數,那湊X元儲存的就應該是錢幣的張數,所以上面的圖片進一步轉化

技術分享

當我們湊5元的時候,由於有3中面值可選,我們不確定選哪個是最佳,所以需要遍歷一次。當選面值1RMB時,需要借助子問題湊4元的答案;當選面值2RMB時,需要借助子問題湊3元;選面值3RMB需要借助子問題湊2元,如此得出三個答案(A,B,C),最終計算著三個答案哪個是最優結果,即哪個所需張數最少,並將至存放到dp[5]作為湊5元的最優結果,以上便是動態規劃在湊硬幣問題上的應用,其實既然都叫思想了很明顯凡是大問題依賴小問題解的都可以使用dp求出。

動態規劃初步