poj1456--贪心策略

来源:互联网 发布:软件评测资质 编辑:程序博客网 时间:2024/06/06 07:25
#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 10005using 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;}

原创粉丝点击