1. 程式人生 > >白話演算法之【動態規劃入門】

白話演算法之【動態規劃入門】

好了,讓我們從最小的i開始吧。當i=0,即我們需要多少個硬幣來湊夠0元。由於135都大於0,即沒有比0小的幣值,因此湊夠0元我們最少需要0個硬幣。 (這個分析很傻是不是?彆著急,這個思路有利於我們理清動態規劃究竟在做些什麼。這時候我們發現用一個標記來表示這句湊夠0元我們最少需要0個硬幣。會比較方便,如果一直用純文字來表述,不出一會兒你就會覺得很繞了。那麼,我們用d(i)=j來表示湊夠i元最少需要j個硬幣。於是我們已經得到了d(0)=0,表示湊夠0元最小需要0個硬幣。當i=1時,只有面值為1元的硬幣可用,因此我們拿起一個面值為1的硬幣,接下來只需要湊夠0元即可,而這個是已經知道答案的,即d(0)=0。所以,d(1)=d(1-1)+1=d(0)+1=0+1=1
。當i=2時,仍然只有面值為1的硬幣可用,於是我拿起一個面值為1的硬幣,接下來我只需要再湊夠2-1=1元即可(記得要用最小的硬幣數量),而這個答案也已經知道了。所以d(2)=d(2-1)+1=d(1)+1=1+1=2。一直到這裡,你都可能會覺得,好無聊,感覺像做小學生的題目似的。因為我們一直都只能操作面值為1的硬幣!耐心點,讓我們看看i=3時的情況。當i=3時,我們能用的硬幣就有兩種了:1元的和3元的( 5元的仍然沒用,因為你需要湊的數目是3元!5元太多了親)。既然能用的硬幣有兩種,我就有兩種方案。如果我拿了一個1元的硬幣,我的目標就變為了:湊夠3-1=2元需要的最少硬幣數量。即d(3)=d(3-1)+1=d(2)+1=2+1=3
。這個方案說的是,我拿31元的硬幣;第二種方案是我拿起一個3元的硬幣,我的目標就變成:湊夠3-3=0元需要的最少硬幣數量。即d(3)=d(3-3)+1=d(0)+1=0+1=1. 這個方案說的是,我拿13元的硬幣。好了,這兩種方案哪種更優呢?記得我們可是要用最少的硬幣數量來湊夠3元的。所以,選擇d(3)=1,怎麼來的呢?具體是這樣得到的:d(3)=min{d(3-1)+1, d(3-3)+1}

相關推薦

白話演算法動態規劃入門

好了,讓我們從最小的i開始吧。當i=0,即我們需要多少個硬幣來湊夠0元。由於1,3,5都大於0,即沒有比0小的幣值,因此湊夠0元我們最少需要0個硬幣。 (這個分析很傻是不是?彆著急,這個思路有利於我們理清動態規劃究竟在做些什麼。) 這時候我們發現用一個標記來表示這句“湊夠0元我們最少需要0個硬幣。”會比較方便

程式設計網格無水題動態規劃最大字串和

Written By MorrowWind,csdnicewing 可以到洛谷的P115上去練習  https://www.luogu.org/problemnew/show/P1115 題目描述         給出資料個

0020演算法筆記——動態規劃最優二叉搜尋樹問題

 1、問題描速: 設 S={x1, x2, ···, xn} 是一個有序集合,且x1, x2, ···, xn表示有序集合的二叉搜尋樹利用二叉樹的頂點儲存有序集中的元素,而且具有性質:儲存於每個頂點中的元素x 大於其左子樹中任一個頂點中儲存的元素,小於其右子

0014演算法筆記——動態規劃凸多邊形最優三角剖分

1、問題相關定義: (1)凸多邊形的三角剖分:將凸多邊形分割成互不相交的三角形的弦的集合T。 (2)最優剖分:給定凸多邊形P,以及定義在由多邊形的邊和絃組成的三角形上的權函式w。要求確定該凸多邊形的三角剖分,使得該三角剖分中諸三角形上權之和為最小。      凸多邊形三

NOJ1540動態規劃_DP最長遞增子序列的長度

1540.最長遞增子序列的長度 時限:1000ms 記憶體限制:10000K  總時限:3000ms 描述 給定一個序列,求它的最長遞增子序列的長度 輸入 先輸入一個正整數n,表示序列的長度,再輸入n個整數表示這個序列 輸出 輸出它的最長遞增子序列的長

Apple Catching動態規劃-dp

Apple Catching It is a little known fact that cows love apples. Farmer John has two apple trees (which are conveniently numbered 1 and

HDU 1159.Common Subsequence動態規劃DP3月8

Common Subsequence Problem Description A subsequence of a given sequence is the given sequence with some elements (possible none) lef

動態規劃/揹包整數劃分的5種情況

1.將n劃分成若干正整數之和的劃分數(可以存在相同整數)。 轉移方程如下: dp[n][m]=dp[n][m-1]+ dp[n-m][m]  dp[n][m]表示整數 n 的劃分中,每個數不大於 m

動態規劃22LiberOJ#515. 「LibreOJ β Round #2」貪心只能過樣例(bitset優化)

題目描述 一共有 n個數,第 i 個數 xi 可以取 [ai,bi] 中任意值。 設 S=∑xi2​​​,求 S 種類數。 輸入輸出格式 第一行一個數 n。 然後 n 行,每行兩個數表示 ai,bi​​。 輸出一行一個

演算法大整數乘法

前面介紹了大整數的加減法,這次是大整數的乘法。同樣是模擬豎式計算,但乘法運算需要克服一些技巧上的障礙:首先需要迴圈巢狀迴圈,然後通過一個數組實現逐位累加,最後統一完成進位工作。 C語言完整程式

動態規劃問題編程題

clas nal spa 規劃 title can ice https rmi 題目來源牛客網 https://www.nowcoder.com/practice/1177e9bd1b5e4e00bd39ca4ea9e4e216?tpId=90&&tqId=

演算法57----字串的交錯組成動態規劃

一、題目:交錯字串 給定三個字串 s1, s2, s3, 驗證 s3 是否是由 s1 和 s2 交錯組成的。 示例 1: 輸入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac" 輸出: true

演算法56-----最小編輯代價動態規劃

一、題目:最小編輯代價 給定兩個字串str1和str2,再給定三個整數ic,dc,rc,分別代表插入、刪除、替換一個字元的代價,返回將str1編輯成str2的最小代價。舉例:str1="abc"   str2="adc"  ic=5    dc=3

演算法63----醜數動態規劃

一、題目: 編寫一個程式,找出第 n 個醜數。 醜數就是隻包含質因數 2, 3, 5 的正整數。 示例: 輸入: n = 10 輸出: 12 解釋: 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 個醜數。 說明:   1 是

演算法64-----完全平方數動態規劃

一、題目: 給定正整數 n,找到若干個完全平方數(比如 1, 4, 9, 16, ...)使得它們的和等於 n。你需要讓組成和的完全平方數的個數最少。 示例 1: 輸入: n = 12 輸出: 3 解釋: 12 = 4 + 4 + 4. 示例 2: 輸入: n = 1

演算法66------計算各個位數不同的數字個數動態規劃

一、題目:計算各個位數不同的數字個數 給定一個非負整數 n,計算各位數字都不同的數字 x 的個數,其中 0 ≤ x < 10n 。 示例: 輸入: 2 輸出: 91 解釋: 答案應為除去 11,22,33,44,55,66,77,88,99 外,在 [0,100) 區間內的所有數字

演算法67-----環繞字串中唯一的子字串動態規劃

一、題目: 把字串 s 看作是“abcdefghijklmnopqrstuvwxyz”的無限環繞字串,所以 s 看起來是這樣的:"...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd....".  現在我們有了另一個字

演算法實驗四--動態規劃--防衛導彈

1046.防衛導彈 時限:1000ms 記憶體限制:10000K  總時限:3000ms 描述 一種新型的防衛導彈可截擊多個攻擊導彈。它可以向前飛行,也可以用很快的速度向下飛行,可以毫無損傷地截擊進攻導彈,但不可以向後或向上飛行。但有一個缺點,儘管它發射時可以達到任意高

轉載通過金礦模型介紹動態規劃 (動態規劃入門)

先附上原文地址:http://www.cnblogs.com/sdjl/articles/1274312.html 通過金礦模型介紹動態規劃         對於動態規劃,每個剛接觸的人都需要一段時間來理解,特別是第一次接觸的時候總是想不通為什麼這種方法可行,這篇文章就是為了

動態規劃硬幣找零問題(難度:1星)

#include <stdio.h> /** * 原題: * 假設有幾種硬幣,如1塊、3塊、5塊,並且數量無限。 * 請找出能夠組成某個數目的找零所使用最少的硬幣數。 */ #def