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

要點

  • 簡化問題
  • 減少計算量

套路

  • 定義狀態(tài)
  • 定義動作
  • 定義邊界
  • 緩存已知

硬幣找零問題

問題:有三種面值硬幣1,3,5倦逐,且無限量,請問共需要找零n元,最少需要幾枚硬幣檬姥?
定義狀態(tài):minCoinNum(n), 即n元需要的最小硬幣數(shù)目曾我。
定義動作(分而治之):假如我知道了minCoinNum(n-1)、minCoinNum(n-3)健民、minCoinNum(n-5)的最少硬幣數(shù)目抒巢,則為n元時,最少硬幣數(shù)目為:min(minCoinNum(n-1)+1, minCoinNum(n-3)+1, minCoin(n-5)+1)秉犹。將n元分為n-1元蛉谜、n-3元、n-5元崇堵,然后選擇一個最小的方案型诚。
定義邊界:當n<1時,沒有余額 鸳劳,需要0個硬幣狰贯,當n等于1、3赏廓、5時涵紊,需要1個硬幣。
緩存已知:minCoinNum(n)作為可能多次計算的數(shù)值幔摸,由于每次計算都一樣摸柄,可以將結(jié)果緩存起來,避免不必要的計算既忆。

簡單的遞歸版本(無緩存已知的計算狀態(tài))代碼

package main

import "math"

var coins []int64

func init() {
    coins = []int64{5, 3, 1}
}

func coinSum(amount int64) int64 {
    if amount < 1 {
        return 0
    }

    var minNum int64 = math.MaxInt64
    for _, v := range coins {
        if amount < v {
            continue
        }
        if amount == v {
            return 1
        }
        minNum = int64(math.Min(float64(minNum), float64(coinSum(amount-v)+1)))
    }
    return minNum
}

func main() {
    var amount int64 = 7
    println(coinSum(amount))
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末塘幅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尿贫,更是在濱河造成了極大的恐慌,老刑警劉巖踏揣,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庆亡,死亡現(xiàn)場離奇詭異,居然都是意外死亡捞稿,警方通過查閱死者的電腦和手機又谋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娱局,“玉大人彰亥,你說我怎么就攤上這事∷テ耄” “怎么了任斋?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耻涛。 經(jīng)常有香客問我废酷,道長瘟檩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任澈蟆,我火速辦了婚禮墨辛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘趴俘。我一直安慰自己睹簇,他們只是感情好,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布寥闪。 她就那樣靜靜地躺著太惠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪橙垢。 梳的紋絲不亂的頭發(fā)上垛叨,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天,我揣著相機與錄音柜某,去河邊找鬼嗽元。 笑死,一個胖子當著我的面吹牛喂击,可吹牛的內(nèi)容都是我干的剂癌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翰绊,長吁一口氣:“原來是場噩夢啊……” “哼佩谷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起监嗜,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤谐檀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裁奇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐猬,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年刽肠,在試婚紗的時候發(fā)現(xiàn)自己被綠了溃肪。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡音五,死狀恐怖惫撰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情躺涝,我是刑警寧澤厨钻,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響莉撇,放射性物質(zhì)發(fā)生泄漏呢蛤。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一棍郎、第九天 我趴在偏房一處隱蔽的房頂上張望其障。 院中可真熱鬧,春花似錦涂佃、人聲如沸励翼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽汽抚。三九已至,卻和暖如春伯病,著一層夾襖步出監(jiān)牢的瞬間造烁,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工午笛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留惭蟋,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓药磺,卻偏偏與公主長得像告组,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子癌佩,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

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