問題 c: 【排序】緊急集合
時間限制: 1 sec 記憶體限制: 64 mb
題目描述
史上著名的大魔導師列別捷夫曾經說過:「平靜的湖面,鍛鍊不出精悍的水手;安逸的生活打造不出時代的偉人。」這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾乎所有的獄警都或多或少的有些懶散,我們可以將之量化為乙個數值即懶散值。所以當典獄長決定集合n個獄警以圍捕修羅王和邪狼時,他所花費的體力是可觀的。
典獄長一次可以將兩群人集合在一起,所花費的體力是這兩堆人的懶散值之和。可以看出,經過n-1次集合,所有的獄警就集合在一起了。例如有3個獄警,懶散值依次為1,2,9。可以先將懶散值為1、2的獄警合併為一群,新群數目為3,耗費體力為3。接著,將新群與懶散值為9的獄警合併,又得到新的群,數目為12,耗費體力為12。所以典獄長總共耗費體力=3+12=15。可以證明15為最小的體力耗費值。那麼,怎樣集合,典獄長花費的體力最少呢?
輸入包括兩行,第一行是乙個整數n(1≤n≤10000),表示獄警人數。第二行包含n個整數,用空格分隔,第i個整數ai(1≤ai≤20000)是第i個獄警的懶散值。
輸出包括一行,這一行只包含乙個整數,也就是最小的體力耗費值。輸入資料保證這個值小於231。
樣例輸入 copy
31 2 9
樣例輸出 copy
15提示
對於30%的資料,保證有n≤1000;
對於50%的資料,保證有n≤5000;
對於全部的資料,保證有n≤10000。
根據題目可以得知,需要每次尋找兩個最小值然後相加,符合優先佇列的思想,該題用優先佇列來解決
**:
#include
#include
#include
int ans,n,m;
priority_queue<
int,vector<
int>
,greater<
int>
>que;
//從小到大排序
intmain()
for(
int i=
1;i) cout << ans << endl;
return0;
}
排序 緊急集合
時間限制 1 sec 記憶體限制 64 mb 提交 32 解決 13 提交 狀態 討論版 命題人 題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾乎所有的獄警...
排序 緊急集合
題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾乎所有的獄警都或多或少的有些懶散,我們可以將之量化為乙個數值即懶散值。所以當典獄長決定集合n個獄警以圍捕修羅王...
排序 緊急集合
時間限制 1 sec 記憶體限制 64 mb 提交 26 解決 10 提交 狀態 討論版 命題人 admin 題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾...