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;}