洛谷题目
这里使用的是优先队列,非常简单
首先让我们一起来学习一下优先队列(默认是从大到小来排列)
首先要使用头文件
#include<queue>
using namespace std;
然后声明有限队列
priority_queue<int> a;
priority_queue<double> a;
这样式的来声明
然后来个复杂的
priority_queue<int, vector<int>,greater<int> > a;
这个式子的变量每一个变量代表分别是
队列中存储的元素的数据类型,底层使用的容器类型,还有决定容器的优先级(这里是从小到大)
然后还有这个队列的一些使用函数
a.pop()弹出顶层元素
a.top()得到顶层元素
a.push(x)将x元素加入队列
a.size()返回队列的长度
a.empty() 查看队列是否为空返回1或者0
然后再是代码
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
priority_queue<int,vector<int>,greater<int> > a;//队列中元素的类型
int main()
{
int n,x,k,j,s=0;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
a.push(x);
}
for(int i=0;i<n-1;i++)
k=a.top();
a.pop();
j=a.top();
a.pop();
s+=k+j;
a.push(k+j);
}
return 0;
}