基於貪心思想對電池的壽命問題的深入研究

2021-09-29 06:43:41 字數 1025 閱讀 6511

小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...