upc 緊急集合 優先佇列

2021-10-03 05:47:52 字數 1103 閱讀 2088

問題 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 題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾...