電池的壽命、
總時間限制: 1000ms 記憶體限制: 65536kb
描述
小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5小時乙個能用3小時,那麼他只能玩3個小時的遊戲,有乙個電池剩下的電量無法使用,但是如果他有更多的電池,就可以更加充分地利用它們,比如他有三個電池分別能用3、3、5小時,他可以先使用兩節能用3個小時的電池,使用半個小時後再把其中乙個換成能使用5個小時的電池,兩個半小時後再把剩下的一節電池換成剛才換下的電池(那個電池還能用2.5個小時),這樣總共就可以使用5.5個小時,沒有一點浪費。
現在已知電池的數量和電池能夠使用的時間,請你找一種方案使得使用時間盡可能的長。
輸入
輸入包含多組資料。每組資料報括兩行,第一行是乙個整數n (2 ≤ n ≤ 1000),表示電池的數目,接下來一行是n個正整數表示電池能使用的時間。
輸出
對每組資料輸出一行,表示電池能使用的時間,保留到小數點後1位。
樣例輸入
2
3 53
3 3 5
樣例輸出
3.0
5.5
思路點拔:首先,我們觀察發現:由於每枚電池的使用時間不同,而我們又要減少浪費才能使所有電池加起來用得最久,不難發現:如果我們把使用時間最長的電池比喻成第一戰隊,其他電池比喻成第二戰隊,使用時間就是戰鬥力(比喻還比較形象吧!^^),然後,兩個戰隊開戰,如果第二戰隊耗盡全力,而第一戰隊還沒有掛掉,那麼說明總用時為第二戰隊的所有能量,拿回本題說就是不是使用時間最長的電池的其他所有電池的使用時間的和,第二種情況就是,第一戰隊耗盡全力,而第二戰隊還沒掛,那麼,第二戰隊由於是多節電池,所以剩下的也不能閒著,就爆發內戰,也就是說讓剩下的電池自相殘殺,每兩節電池相互殘殺半小時,這樣總會懟完(我不知道怎麼形容了 ^^),至於為什麼是懟半小時而不是一小時,這裡就賣個關子,請讀者自己思考^_^,可能這樣說,**都已經顯而易見的。還是上**吧!!!
#include
#include
using
namespace
std;
int main()
if((sum-max)/*第一種情況:如果所有除了用時最長的那節電池外的其他所有電池用時
總和都不能用完用時用時最長的那節電池的話,說明總時間為除了用時最長的
那節電池外的其他電池的用時總和,可能有點繞,其實很簡單,再理一理^_^*/
else
/*第二種情況:就是除了用時最長的那節電池外的其
他所有電池用時總和能懟完用時最長的那節電池,說明答案是用時最
長的那節電池的用時加剩下的時間除以2,相信讀到這裡,大家大概
也知道上面我為什麼說是兩節電池懟半個小時了*/
}return
0;//完美結束
} /*貪心策略並不難,但是要想到第二種情況可能就是能力問題
了(因為第一次聽課時,我也在坐飛機),在多走一走,雖然
**量短,但要理解透,還是不那麼簡單,再多多整理^_^*/
貪心 電池的壽命
電池的壽命 總時間限制 1000ms 記憶體限制 65536kb 描述 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個...
電池壽命問題 (貪心)
題目描述 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。現在已知電池的數量和電池能夠使用的時間,請你找一種方案使得使用時間盡可能的長。題...
ACM 電池的壽命(貪心)
此題,可惜了 附上原題 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5小時乙個能用3小時,那麼他只能玩3...