現存在一堆面值為 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 程式設計任務 設計乙個動態規劃演算...