動態規劃演算法是電腦科學演算法中最重要也是最常用的乙個演算法, 巧妙的利用它可以解決很多複雜的問題,另外也頻繁的出現在各大網際網路公司的面試中,因此掌握它是十分必要的。
但該演算法對於初學者來說,要想徹底的掌握理解它並非易事,本系列教程將帶領大家一起來學習該演算法,通過經典的案列介紹和解題分析,試圖歸納出一套統一的方法來解決動態規劃類題目。本系列重點介紹分析問題的思路和方法,而非直接告訴你答案,給您不一樣的分析問題的思路。
首先我們來看一道非常經典的「湊硬幣」題目:
面值為1元、3元、5元的硬幣若干,如何用最少的硬幣湊夠11元?
解題思路:
步驟1:用函式的形式來表示題目結果。
設f(x) = y,該函式表示湊夠x元,最少的硬幣數量為y。 舉例如下:
步驟2:分析遞推情況。
湊夠11元,我們需要多次選擇,如: 第一次選擇1元,則還需要湊夠11 - 1 = 10元;
第二次選擇3元,則還需要湊夠10 - 3 = 7元; 。。。
如果我們選擇了一枚1元硬幣,則f(11) = 1 + f(11-1),表示湊夠11元選擇了一枚1元硬幣,那麼還剩下需要湊夠11-1 = 10元的硬幣數量f(10)。
同理如果選擇3元則f
動態規劃演算法 硬幣問題
1.問題描述 n種硬幣,面值分別是 v 1 v 2 v n 給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?求出硬幣數目的最大值和最小值。2.分析 初始狀態為 s,目標狀態為0。若當前狀態在i,每使用乙個硬幣j,狀態便轉移到i v j 我們用d i 表示求總和為i的最少硬幣數量 其實就是動...
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...