#include<cstdlib>
#include<iostream>
#include<sstream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include <algorithm>
#include<vector>
#include<set>
#include<queue>
#define LL long long
#define inf 0x7fffffff
#define E 1e-9
#define M 100
#define N 10005
using namespace std;
int n,p[N],d[N],sub[N];
bool cmp(int i,int j)
{
return d[i]<d[j];
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ex.in","r",stdin);
#endif
while(scanf("%d",&n)!=EOF)
{
if(!n)
{
printf("0\n");
continue;
}
for(int i=0; i<n; i++)
sub[i]=i;
for (int i=0; i<n; i++)
{
scanf("%d%d",&p[i],&d[i]);
}
sort(sub,sub+n,cmp);
priority_queue<int,vector<int>,less<int> > q;
int pre=d[sub[n-1]];
int sum=0;
for(int i=n-1; i>=0; i--)
{
int j=sub[i];
if(d[j]==pre)
{
q.push(p[j]);
}
else
{
int k=0;
while(!q.empty()&&k<pre-d[j])
{
sum+=q.top();
q.pop();
k++;
}
pre=d[j];
q.push(p[j]);
}
}
int k=0;
while(!q.empty()&&k<pre-0)
{
sum+=q.top();
q.pop();
k++;
}
printf("%d\n",sum);
}
return 0;
}
poj1456--贪心策略
最新推荐文章于 2019-09-02 22:37:15 发布