貪心演算法(又稱貪婪演算法)是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,演算法得到的是在某種意義上的區域性最優解 [1] 。
貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇。也就是說,不從整體最優上加以考慮,做出的只是在某種意義上的區域性最優解。詳情參見貪心演算法
根據貪心選擇性質:乙個問題的整體最優解可通過一系列區域性的最優解的選擇達到,並且每次的選擇可以依賴以前作出的選擇,但不依賴於後面要作出的選擇。這就是貪心選擇性質。對於乙個具體問題,要確定它是否具有貪心選擇性質,必須證明每一步所作的貪心選擇最終導致問題的整體最優解 。
(1) 輸入貨幣面值列表v和需要支付的價錢a;
(2) def func(v, a):
(3) v.sort(reverse=true) # 將貨幣面值排序,大的在前面,表示優先使用
(4) total = 0 # 整體用的貨幣的個數
(5) for i in range(len(v)):
(6) t = a / v[i]
(7) a = a - t * v[i]
(8) total += t
(9) return total
def
func
(v, a)
: v.sort(reverse=
true
)# 將貨幣面值排序,大的在前面,表示優先使用
total =
0# 整體用的貨幣的個數
程式設計 貪心演算法解決硬幣問題
問題描述 有1元 5元 10元 50元 100元 500元的硬幣各c1,c5,c10,c50,c100,c500枚。現在要用這些硬幣來支付a元,最少需要多少枚硬幣?假設本題至少存在一種支付方案。限制條件 0 c1,c5,c10,c50,c100,c500 10的9次方 0 a 10的9次方 輸入 c...
硬幣問題(典型的貪心演算法)
有1元,5元,10元,50元,100元,500元的硬幣各c1 c5 c10 c50 c100 c500 枚。現在要用這些硬幣來支付a 元,最少需要多少枚硬幣?假設本題至少存在一種支付方案。限制條件 0 c1 c5 c10 c50 c100 c500 100000000000 0 a 10000000...
硬幣找零問題 貪心演算法
問題 有1元 2元 5元 10元的硬幣無限多枚。現在要用這些硬幣來支付a 輸入 元,返回需要多少枚硬幣的找零序列。能找回高面值硬幣就先找回高面值硬幣。include include using namespace std class sulotion 用來儲存結果 int p coins.size ...