動態規劃經典題目之二(找零錢)

2021-08-25 19:32:53 字數 1013 閱讀 2377

現存在一堆面值為 1,2,5,11,20,50 面值的硬幣,問最少需要多少個硬幣才能找出總值為 n個單位的零錢?

定義optimal[i]是找到總值為i的錢數所需要的最少硬幣數量。那麼,初始值應該為 optimal[0] = 0; 0 元需要 0個硬幣。

定義value = ;

定義i = 1 至 n;    

從 1元開始遞推到n元,那麼存在optimal[i] = min ,k = 1 ... value_num ;     這個遞推關係式,optimal[i] 是湊成第i元的 最少硬幣數,假設從前往後遞推,那麼此時,1元至i-1元 已經是最優解

當我確定optimal[i]時, 我只要遍歷一遍 value。每一次迴圈,就能知道使用value[k],k=1...value_size, 拼成i元,需要的最少零錢(即:min_money = optimal[i - value[k]] + 1),所以拼成第i元的最優解,optimal[i] = min ,k = 1 ... value_num ,

注:optimal[i] 的初始值 = inf 即可。

#include #define inf 0x3f3f3f3f;

using namespace std;

//value 存放零錢 value_num 多少種零錢 n 要找的錢的數量

int dp_opt(int* value,int value_num,int n)

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

}opt[i] = min_money;

} //for(int i = 0; i<=n;i++)

// cout << opt[i] << " ";

//cout << endl;

return opt[n];

}int main()

; int n;

cin >> n;

cout << dp_opt(value,5,n) << endl;

return 0;

}

動態規劃5 找零錢問題

題目 有陣列penny,penny中所有的值都為正數且不重複。每個值代表一種面值的貨幣,每種面值的貨幣可以使用任意張,再給定乙個整數aim 小於等於1000 代表要找的錢數,求換錢有多少種方法。給定陣列penny及它的大小 小於等於50 同時給定乙個整數aim,請返回有多少種方法可以湊成aim。樣例...

動態規劃 找零錢問題 收藏

view plaincopy to clipboardprint?include using namespace std const int m 1000 const int n 3 int coint n int count m 1 count i 表示湊合數量為i所需最少的錢幣數量,則count...

找零錢問題 動態規劃 python

問題描述 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢,可以實用的各種面值的硬幣個數不限。當只用硬幣面值t 1 t 2 t i 時,可找出錢數j的最少硬幣個數記為c i,j 若只用這些硬幣面值,找不出錢數j時,記c i,j 程式設計任務 設計乙個動態規劃演算...