需要找零x元,有n種面值硬幣,求找零最少需要硬幣個數的方法。
這題如果用貪心演算法做,很可能無法得到最優解甚至無法無法找零,比如要找零11元,有三種硬幣,最優解是,用貪心就會先用10塊錢去消耗,那這題就無法完成。
所以這題用動態規劃最合適,利用遞推和快取,動態規劃將問題拆分成若干個子問題,通過子問題的最優解不斷往上遞推得出問題的最優解,這比貪心演算法慢,但得到的答案跟準確。
#include
void mincoin(int cost, int cointype, int typenum);
void main()
; //紙幣面額
// int cointype[2] = ; //test
const
int typenum = sizeof(cointype) / sizeof(cointype[1]);//種類數量
//int coinused[typenum + 1]; coinused[0] = 0;// 1-cost 找零各需要多少硬幣
mincoin(cost, cointype, typenum);
}void mincoin(int cost, int cointype, int typenum)}}
/* coinused[i]==9999999? printf("無法找零\n") : printf("找%d塊錢最少需要%d個硬幣\n",i, coinused[i]); 測試*/
動態規劃 最少硬幣問題
problem description 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001,設計乙個用最少硬幣找錢m的方法。對於給定的1 n 10,硬幣面值陣列t和可以使用的...
最少硬幣問題 (動態規劃)
最少硬幣問題 time limit 1000 ms memory limit 65536 kib problem description 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 ...
動態規劃 最少硬幣問題
time limit 1000 ms memory limit 65536 kib problem description 設有n種不同面值的硬幣,各硬幣的面值存於陣列t 1 n 中。現要用這些面值的硬幣來找錢。可以使用的各種面值的硬幣個數存於陣列coins 1 n 中。對任意錢數0 m 20001...