首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

STL-priority_queue zoj_2212,zoj_2724,zoj_3230

2012-10-28 
STL---priority_queue zoj_2212,zoj_2724,zoj_3230??????????priority_queue顾名思意是优先队列的意思,在S

STL---priority_queue zoj_2212,zoj_2724,zoj_3230

??????????priority_queue顾名思意是优先队列的意思,在STL内部的实现形式是堆。使用priority_queue的关键就是重载比较函数,去实现不同要求的堆。另外,值得注意的是,二叉堆实现的优先队列是不稳定的,这点要特别注意

???????? 在重载优先队列比较函数的时候注意是重载一个类,在类中重写一个()操作符。

?zoj_3230

#include<iostream>#include<cstdio>#include<algorithm>#include<queue>using namespace std;class problem{public:int a,b;};struct cmp{bool operator()(const problem x,const problem y){return x.b<y.b;//升序}};bool cmp2(const problem x,const problem y){return x.a<y.a;//极大堆}int m,n,p,a,b;problem plist[100005];int main(){freopen("e:\\zoj\\zoj_3230.txt","r",stdin);priority_queue<problem,vector<problem>,cmp >q;while(cin>>n>>m>>p){while(!q.empty())q.pop();for(int i=0;i<n;++i){cin>>a>>b;problem pr;pr.a=a;pr.b=b;plist[i]=pr;}sort(plist,plist+n,cmp2);for(int i=0;i<n;i++){if(m==0)break;if(plist[i].a<=p)q.push(plist[i]);else{if(!q.empty()){problem pr=q.top();p+=pr.b;--m;--i;q.pop();}elsebreak;}}while(m--){if(!q.empty()){problem pr=q.top();p+=pr.b;q.pop();}elsebreak;}cout<<p<<endl;}}

?

热点排行