資料結構 貪心演算法(人民幣 分糖果)

2021-08-22 19:25:49 字數 2207 閱讀 8109

一、貪心演算法存於生活中

1.1人民幣支付問題

1.1.1演算法思想

1.1.2程式實現

1.1.3程式結果

1、舉個例項

二、分糖果 leetcode455

2.1舉個例項

2.2貪心規律

2.3演算法思路

2.4程式實現

2.5程式結果

1、人民幣支付問題

現在去超市買東西,結賬時,要求支付一定金額的現金,那麼,按照生活常識,我們肯定會選擇盡可能少的拿出錢的張數去滿足支付金額,比如說:應付628元,這時候,我的錢包裡有足夠多的以下面額的錢:100,50,20,10,5,2,1,那麼,我肯定會拿出6張100塊的,1張20的,1張5塊的,1張2塊的,最後再拿出1張1塊的,6*100+20+5+2+1 = 628;那麼我用10張就可以愉快的完成支付了,正常情況下,絕對不會拿628張1塊的去支付或者其它。

那麼,將這種思想體現在程式設計上,就是我們所稱的貪心演算法

貪心演算法:遵循某種規律,不斷貪心的選取當前最優策略的演算法設計方法。

就上面的例子,體現在程式設計中如下:

1、演算法思想

(1)面值為100,50,20,10,5,2,1面值都是比自己小的面值的兩倍或者以上;

(2)當使用一張較大面額時,若用較小面額鈔票替換,則需要兩張或者更多張鈔票。

2、程式實現

#include#include#includeusing namespace std;

class solution

3、程式結果**

已知有一些孩子和一些糖果,每個孩子都有需求因子g,每個糖果有大小s;如果某個糖果的大小s>=某個孩子的需求因子時,代表該糖果可以滿足該孩子,使用這些糖果,最多可以滿足多少孩子?(注意:某個孩子最多只能被一塊糖果滿足)

1、舉個例項

孩子的需求因子為g = [5, 10, 2,9,15,9];糖果的大小陣列為:s = [6,1,20,3,8],那麼,這種情況下,最多可以,滿足3個孩子。

2、貪心規律

(1)某個糖果不能滿足某個孩子,那麼,該糖果一定不能滿足更大需求因子的孩子。

(2)某個孩子可以用更小的糖果滿足,則沒必要用更大的糖果,留著更大的糖果去滿足需求因子更大的孩子。(貪心!!

(3)孩子的需求因子更小則其更容易被滿足,故優先從需求因子小的孩子開始,因為用乙個糖果滿足乙個較大需求因子的孩子或滿足較小需求因子的孩子效果一樣。(最終總量不變)(貪心!!

3、演算法思路

(1)對需求因子陣列g和糖果大小陣列s進行從小到大排序;

(2)按照從小到大的順序使用各糖果,嘗試是否可以滿足某個孩子,每個糖果只嘗試一次;若成功,則換下乙個糖果嘗試;直到發現沒有孩子或者沒有糖果,迴圈結束。

4、程式實現

#include#include#includeusing namespace std;

void print(std::vectorv)//列印函式

5、程式結果

資料結構 貪心演算法

最近開始學習王爭老師的 資料結構與演算法之美 通過總結再加上自己的思考的形式記錄這門課程,文章主要作為學習歷程的記錄。首先來看乙個例子,假設我們有乙個可以容納100kg物品的揹包 為了使揹包中所裝物體的總價值最大,如何選擇在揹包中裝哪些豆子?這個問題的解決是將單價從高到低排列,它的本質借助的是貪心演...

資料結構與演算法 貪心演算法

1 給定 n 種物品和乙個揹包,物品 i 的重量是 w i 其價值是 p i 揹包的容量為 c。設物品已按單位重量價值遞減的次序排序。每種物品不可以裝入揹包多次,但可以裝入部分的物品 i。揹包問題是選擇裝入揹包中的物品,在不超過揹包容量的前提下使揹包的得總價值最大。用貪心法設計與實現乙個演算法,求解...

資料結構與演算法 貪心演算法

定義每個古董重量 揹包問題 在對問題求解時,總是作出在當前看來是最好的選擇。也就是說,不從整體上加以考慮,它所作出的僅僅是在某種意義上的區域性最優解 是否是全域性最優,需要證明 有一天海盜們截獲了一艘裝滿各種各樣古董的貨船,每一件都價值連城,一旦打碎就是去了價值,海盜船載重量為c,每件固定的重量為w...