合併果子 CSU1588 (優先佇列 貪心策略)

2021-08-20 09:14:09 字數 720 閱讀 1804

現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。

第一行包含乙個整數t(t<=50),表示資料組數。

每組資料第一行包含乙個整數n(2<=n<=1000),表示果子的堆數。

第二行包含n個正整數ai(ai<=100),表示每堆果子的果子數。

每組資料僅一行,表示最小合併代價。

2

41 2 3 4

53 5 2 1 4

19

33

優先佇列有乙個功能是元素在入隊的同時進行自動排序,預設非公升序;這時候需要自定義排序型別,然後每次把佇列的前兩個元素加起來再入隊。

priority_queue <

int,

vector

,less<

int> > p; //非公升序

priority_queue <

int,

vector

,greater<

int> > q; //非降序

#include #include using namespace std;

int main()

for(int i = 1; i < l; i++)

cout<} return 0;

}

CSU 1588 合併果子

submit page summary time limit 1 sec memory limit 128 mb submitted 1351 solved 580 現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。第一行包...

合併果子 CSU 1588

現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。input 第一行包含乙個整數t t 50 表示資料組數。每組資料第一行包含乙個整數n 2 n 1000 表示果子的堆數。第二行包含n個正整數ai ai 100 表示每堆果子...

CSU 1588 合併果子

現在有n堆果子,第i堆有ai個果子。現在要把這些果子合併成一堆,每次合併的代價是兩堆果子的總果子數。求合併所有果子的最小代價。第一行包含乙個整數t t 50 表示資料組數。每組資料第一行包含乙個整數n 2 n 1000 表示果子的堆數。第二行包含n個正整數ai ai 100 表示每堆果子的果子數。每...