题目的意思就是给出几个数字,两两相加,再把结果放回去。然后把每次相加的和加起来求最小的。。
例如1 2 3.那就是1 +2 = 3;
然后3+ 3 = 6;
两次和分别是3,6,那结果就是9
要求最小就是每次都把最小的两个数相加。然后和在放回队列。因为加完后的和在队列中的的大小位置不确定,所以用优先队列。
AC代码:
#include<queue>
#include<iostream>
using namespace std;
priority_queue<int,vector<int> ,greater<int> > q;
int main () {
int num;
while (cin >> num && num) {
int temp;
for (int i = 0 ;i < num ;i++) {
cin >> temp;
q.push(temp);
}
int a,b,c;
int sum = 0;
while (1) {
a = q.top();
q.pop();
if (q.empty())
break;
b = q.top();
q.pop();
c = a + b;
q.push(c);
sum += c;
}
cout << sum << endl;
}
}