优先队列 贪心
优先队列:每次加入队列 都将最大的放在队首(默认)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
struct Prod
{
int pi;
int di;
} p[10005];
bool cmp(Prod a,Prod b)
{
return a.di>b.di;
}
int main()
{
int m;
while(scanf("%d",&m)!=EOF)
{
priority_queue<int>q;
int maxt=0;
int cnt=0,cnp=0;
for(int i=0; i<m; i++)
{
cin>>p[i].pi>>p[i].di;
if(p[i].di>maxt)
{
maxt=p[i].di;
}
}
sort(p,p+m,cmp);
int pos=0;
int ans=0;
for(int t=maxt; t>0; t--)
{
while(pos<m&&p[pos].di==t)
{
q.push(p[pos++].pi);
}
if(!q.empty())
{
ans+=q.top();
q.pop();
}
}
cout<<ans<<endl;
}
return 0;
}