include<stdio.h>
#include<functional>
#include<queue>
#include<vector>
using namespace std;
//定义结构,使用运算符重载,自定义优先级1
struct cmp1{
bool operator ()(int &a,int &b){
return a>b;//最小值优先
}
};
struct cmp2{
bool operator ()(int &a,int &b){
return a<b;//最大值优先
}
};
//定义结构,使用运算符重载,自定义优先级2
struct number1{
int x;
bool operator < (const number1 &a) const {
return x>a.x;//最小值优先
}
};
struct number2{
int x;
bool operator < (const number2 &a) const {
return x<a.x;//最大值优先
}
};
int a[]={14,10,56,7,83,22,36,91,3,47,72,0};
number1 num1[]={14,10,56,7,83,22,36,91,3,47,72,0};
number2 num2[]={14,10,56,7,83,22,36,91,3,47,72,0};
int main()
{ priority_queue<int>que;//采用默认优先级构造队列
priority_queue<int,vector<int>,cmp1>que1;//最小值优先
priority_queue<int,vector<int>,cmp2>que2;//最大值优先
priority_queue<int,vector<int>,greater<int> >que3;//注意“>>”会被认为错误,
//这是右移运算符,所以这里用空格号隔开
priority_queue<int,vector<int>,less<int> >que4;最大值优先
priority_queue<number1>que5;
priority_queue<number2>que6;
}
修栅栏问题利用优先队列,贪心法
#include <iostream>
#include <queue>
using namespace std;
typedef long long ll;
priority_queue<int,vector<int>,greater<int> > pque;
int main(){
int n,a[100];
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
}
for(int i=0;i<n;i++){
pque.push(a[i]);
}
int ans=0;
while(pque.size()>1){
int t1;
t1=pque.top();
pque.pop();
t1+=pque.top();
pque.pop();
ans+=t1;
pque.push(t1);
cout<<ans<<" ";
}
cout<<ans;
return 0;
}
/*
3
8 5 8
*/