動態規劃 金幣配置

2021-10-01 23:08:40 字數 951 閱讀 7332

【問題描述】

給定一系列的整數金額的硬幣(數量足夠),給定乙個金額n,問有多少種組配方案?

例如,面值為1和面值為2的硬幣,組配金額4,方案如下:

共三種方案。

【求解思路】

將所有硬幣按照面值大小從小到大排列,假設有m種不同面值的硬幣,那麼最終組配方案可以分為m類:

dp[i]

表示面值

i 的組成種類,每一 輪用前 j

種硬幣進行組配,當第 j

輪,也就是用前

j 種硬幣進行組配時,

dp[i]=dp[i]+dp[i-cost[j]] 也就是在之前的i-cost[j]金額的組配方法總數的基礎上,在加上引入硬幣 coin[j]

的方法總數。

遞推關係式:

dp[i]+=dp[i-cost[j]]

num(coin,amount) 

dp=new int[amount]

dp[0]=1 //初始化dp[0]=1方便計算

for(int v:coin) //每一輪引入新的硬幣

for(int i=0;i0)

dp[i]+=dp[i-v]

end for

end for

return dp[amount]

對於乙個需要組配的金額,其可以分為以下

n 類,每一類僅僅使用前

i 種硬幣進行組配,將

硬幣按面值從小到大排,每一輪分析價值

j 的組配方案,累加到

dp[j]

。很顯然

dp[j]

的最優求

解方案對應的

dp[j-coin]

一定是最優方案。一輪輪方案疊加起來即為最終解。

動態規劃求解扎氣球得金幣遊戲

給定n個氣球,編號從0至n 1,每個氣球上寫了乙個數字,這些數字存放在陣列nums中。現在你來扎破所有的氣球。當扎破第i個氣球時,可以得到的金幣個數為nums left nums i nums right 這裡的left和right指的是第i個氣球相鄰氣球的編號。當扎破乙個氣球後,原來它左右側的氣球...

動態規劃 什麼是動態規劃?

先來看看 資訊學奧賽一本通第5版 是怎麼說的 動態規劃程式設計是對解最優化問題的一種途徑 一種方法,而不是一種特殊演算法。不像前面所述的那些搜尋或數值計算那樣,具有乙個標準的數學表示式和明確清晰的解題方法。動態規劃程式設計往往是針對一種最優化問題,由於各種問題的性質不同,確定最優解的條件也互不相同,...

mysql動態規劃 動態規劃

動態規劃 能夠動態規劃的問題具有以下特點 可分解成規模更小的子問題 子問題的結果可復用 關鍵是要理解狀態轉移方程的含義就好啦!數字三角形 問題描述 在數字三角形尋找從頂到底的路徑,使得路徑經過的數字之和最大。規定每一步只能往左下或右下走,求出最大路徑和。遞迴解法 include include us...