题目:
给出N个数字,将两个数字合并的消耗为两个数字之和,求将所有数字合并成一个的最最小消耗。
思路:
大顶堆板子题,可以用优先队列直接做。
代码:
#include <bits/stdc++.h>
using namespace std;
priority_queue< long long, vector< long long >, greater < long long > > que;
int main( ) {
int i, j, k;
long long temp;
int N;
unsigned long long ans = 0;
scanf("%d", &N );
for ( i = 1; i <= N; i ++ ) {
scanf("%d", &temp );
que.push( temp );
}
for ( i = 1; i < N; i ++ ) {
temp = que.top( );
que.pop( );
temp += que.top( );
que.pop( );
ans += temp;
que.push( temp );
}
cout << ans << endl;
}