動態規劃 硬幣問題

2021-08-01 09:25:11 字數 678 閱讀 6282

問題描述:

輸入總金額n,硬幣不同價值的種類m,m種硬幣的面值; 

例如:15 6

1 2 7 8 12 50

輸出湊成n最少的硬幣數

(1)貪心演算法:

每次都選擇面值最大的。問題在於,求出來的並不是最優解,上例中,用貪心解出來的結果為3(1,2,12),而實際為2(7,8)

#include#includeusing namespace std;

int main()

else i--; //每一硬幣可以重複使用

} cout<

(2)動態規劃

dp[j] 代表目標為j元的時候,需要的硬幣數量

狀態轉移方程 dp[j+a[i]]=min(dp[j+a[i]],dp[j]+1) 代表選擇當前硬幣面值為a[i]時,放或者不放,找出數量最小的乙個

#include#includeusing namespace std;

int main()

{ int n,m;

cin>>n>>m;

int a[m+1];

for(int i=1;i<=m;i++)

cin>>a[i];

sort(a,a+m);

int dp[n+1];

for(int i=0;i

動態規劃 硬幣問題

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

動態規劃 硬幣問題

2013 07 11 03 17 5610人閱讀收藏 舉報 演算法和資料結構學習 79 最少硬幣問題 假設有3種不同的硬幣,幣值分別是coinvalue 每一種硬幣的數量是有限的,分別是coinnum 給定乙個數值target 18,找出一種硬幣數最少的方法,輸出最少的硬幣數。思路 動態規劃。問題定...

動態規劃 硬幣問題

整理的演算法模板合集 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 ...