小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5小時乙個能用3小時,那麼他只能玩3個小時的遊戲,有乙個電池剩下的電量無法使用,但是如果他有更多的電池,就可以更加充分地利用它們,比如他有三個電池分別能用3、3、5小時,他可以先使用兩節能用3個小時的電池,使用半個小時後再把其中乙個換成能使用5個小時的電池,兩個半小時後再把剩下的一節電池換成剛才換下的電池(那個電池還能用2.5個小時),這樣總共就可以使用5.5個小時,沒有一點浪費。
現在已知電池的數量和電池能夠使用的時間,請你找一種方案使得使用時間盡可能的長。
輸入包含多組資料。每組資料報括兩行,第一行是乙個整數n(2≤n≤1000),表示電池的數目,接下來一行是n個正整數表示電池能使用的時間。
對每組資料輸出一行,表示電池能使用的時間,保留到小數點後1位。
23 5
33 3 5
3.05.5
咋一看可能還摸不到思路,但仔細研究幾個例子後會發現一共就兩種情況
所有電池中,有一節能使用的時間太大了,別的耗不完它,所以它就產生了浪費。
電池的使用時間比較平均,可以互相耗。
上面是對兩種情況感性的理解,實質就是
當使用時間最長的電池超過了總使用時間的一半時,別人無法耗完它,此時就會產生浪費,所以有效使用時間就為其它電池的使用時間之和。
當最大者的使用時間不到總和的一半時,那除開它必定至少還有2個電池,那我們就可以讓其餘的電池打車輪戰,直到把電量耗到與最大者相等,最後讓二者耗完。此時無一點浪費,所以有效使用時間為總和的一半。
對,這就是典型的貪心思想。
看看**吧!
#include
using
namespace std;
int n,a[
1200];
intmain()
else
}return0;
}
貪心 電池的壽命
電池的壽命 總時間限制 1000ms 記憶體限制 65536kb 描述 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個...
電池的壽命(貪心)
電池的壽命 總時間限制 1000ms 記憶體限制 65536kb 描述 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個...
ACM 電池的壽命(貪心)
此題,可惜了 附上原題 小s新買了乙個掌上遊戲機,這個遊戲機由兩節5號電池供電。為了保證能夠長時間玩遊戲,他買了很多5號電池,這些電池的生產商不同,質量也有差異,因而使用壽命也有所不同,有的能使用5個小時,有的可能就只能使用3個小時。顯然如果他只有兩個電池乙個能用5小時乙個能用3小時,那麼他只能玩3...