头文件
< queue>
<functional>
priority_queue<int, vector<int>, greater<int> > q; //从小到大的优先级队列,可将greater改为less,即为从大到小
q.push() 插入一个元素
q.pop() 弹出队头元素
q.top() 队头元素
q.size() 队列长度
题意,一个队列每次合并最小的两个数,这两个数的和再次插入队列,重复直到队列只有一个数。
#include<iostream>
#include<queue>
#include<functional>
using namespace std;
int n;
int s[100000];
int nn;
int main()
{
cin >> n;
nn = n;
int i=0;
int sum = 0;
int a;
int b;
priority_queue<int, vector<int>, greater<int> > q;
while (n--)
{
cin >> i;
q.push(i);
}
if (nn == 1)
{
cout << q.top() << endl;
return 0;
}
while (q.size()>1)
{
a = q.top();
q.pop();
b= q.top();
q.pop();
sum += (a+b);
a += b;
q.push(a);
}
cout << sum << endl;
return 0;
}
网友评论