题目的意思是:n个数的集合,从中拿出两个数删掉,并将他们的和放入集合。要使最后的数最小
很容易想到类似与Huffman编码,但是我们可以更简单的实现,用优先队列。
下面的是AC的代码:
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int main()
{
int n, x, i;
while(cin >> n && n)
{
priority_queue<int, vector<int>, greater<int> > q;
for(i = 0; i < n; i++)
{
cin >> x;
q.push(x);
}
int ans = 0;
for(i = 0; i < n - 1; i++)
{
int a = q.top(); q.pop();
int b = q.top(); q.pop();
ans += a + b;
q.push(a + b);
}
printf("%d\n", ans);
}
return 0;
}