1. 程式人生 > >CCF--打醬油(Python) 貪心演算法

CCF--打醬油(Python) 貪心演算法

問題描述   小明帶著N元錢去買醬油。醬油10塊錢一瓶,商家進行促銷,每買3瓶送1瓶,或者每買5瓶送2瓶。請問小明最多可以得到多少瓶醬油。 輸入格式   輸入的第一行包含一個整數N,表示小明可用於買醬油的錢數。N是10的整數倍,N不超過300。 輸出格式   輸出一個整數,表示小明最多可以得到多少瓶醬油。 樣例輸入 40 樣例輸出 5 樣例說明   把40元分成30元和10元,分別買3瓶和1瓶,其中3瓶送1瓶,共得到5瓶。 樣例輸入 80 樣例輸出 11 樣例說明   把80元分成30元和50元,分別買3瓶和5瓶,其中3瓶送1瓶,5瓶送2瓶,共得到11瓶。

程式碼如下:

N = int(input()) print(int(int(N/50)*7+int(N%50/30)*4+int(N%50%30)/10))

使用貪心演算法,兩行解決。 這裡寫圖片描述

貪心演算法: 貪心演算法(Greedy algorithm)是一種對某些求最優解問題的更簡單、更迅速的設計技術。用貪婪法設計演算法的特點是一步一步地進行,常以當前情況為基礎根據某個優化測度作最優選擇,而不考慮各種可能的整體情況,它省去了為找最優解要窮盡所有可能而必須耗費的大量時間,它採用自頂向下,以迭代的方法做出相繼的貪心選擇,每做一次貪心選擇就將所求問題簡化為一個規模更小的子問題,通過每一步貪心選擇,可得到問題的一個最優解,雖然每一步上都要保證能獲得區域性最優解,但由此產生的全域性解有時不一定是最優的,所以貪婪法不要回溯。

貪心演算法是一種改進了的分級處理方法。其核心是根據題意選取一種量度標準。然後將這多個輸入排成這種量度標準所要求的順序,按這種順序一次輸入一個量。如果這個輸入和當前已構成在這種量度意義下的部分最佳解加在一起不能產生一個可行解,則不把此輸入加到這部分解中。