動態規劃 硬幣問題

2021-07-25 22:37:44 字數 986 閱讀 1772

2013-07-11 03:17

5610人閱讀收藏 

舉報

演算法和資料結構學習(79)

最少硬幣問題

假設有3種不同的硬幣,幣值分別是coinvalue = ,每一種硬幣的數量是有限的,分別是coinnum = ,給定乙個數值target=18,找出一種硬幣數最少的方法, 輸出最少的硬幣數。

思路: 動態規劃。

問題定義:

dp[n][m] 表示當目標值為n,有m種硬幣可選的時候的最少硬幣數,那麼對於問題來說,dp[18][3] 是我們要求的最終結果。

那麼如何把這個大問題分解成小的同類問題。

dp[n][m]= min     條件i= 0

那麼dp[18][3] = min,

也就是說dp[18][3]可以分解為當對於5分值得硬幣選0個,選1個,選2,選3個之後的子問題,當選完5這種硬幣時,接下來只有1分和2分的硬幣可選, 於是子問題就變成為dp[18][2],dp[13][2], dp[8][2], dp[3][2].

**:

硬幣組合問題

假設現有3種硬幣,, 但是每種硬幣的個數沒有限制,可以是無限,現在問要籌成18, 有多少種組合方式?

思路: 動態規劃。

問題定義:

dp[n][m]表示當目標值為n, 有m種硬幣可選的時候的組合數,同樣,dp[18][3]是我們要求的最終結果。

同樣,dp[n][m] = sum    條件 n-i*coinvalue[m] >=0

那麼dp[18][3] =dp[18][2] + dp[13][2] + dp[8][2] + dp[3][2].

也就是說dp[18][3]可以分解為當對於5分值得硬幣選0個,選1個,選2,選3個之後的子問題,當選完5這種硬幣時,接下來只有1分和2分的硬幣可選, 於是子問題就變成為dp[18][2],dp[13][2], dp[8][2], dp[3][2].

**:

動態規劃 硬幣問題

這是乙個固定重點的最長路和最短路問題,可用動態規劃問題來求解 代表硬幣總值,n代表硬幣總數,v陣列儲存硬幣各個面值,d代表從i出發到結點0的路徑的最長路徑長度或最短路徑長度 vis代表是否訪問過該結點 int n,s,v maxn d maxn vis maxn int dpmax int s re...

動態規劃 硬幣問題

問題描述 輸入總金額n,硬幣不同價值的種類m,m種硬幣的面值 例如 15 6 1 2 7 8 12 50 輸出湊成n最少的硬幣數 1 貪心演算法 每次都選擇面值最大的。問題在於,求出來的並不是最優解,上例中,用貪心解出來的結果為3 1,2,12 而實際為2 7,8 include includeus...

動態規劃 硬幣問題

整理的演算法模板合集 acm模板 問題描述 有n種硬幣,面值分別為v1,v2,v 3,v nv 1,v 2,v 3,v n v1 v2 v3 v n 每種都有無限多。給定非負整數s,可以選用多少個硬幣,使得面值之和恰好為s?輸出硬幣數目的最小值和最大值。1 n 100,0 s 10000,1 vi ...