题目链接:http://poj.org/problem?id=1456
题意:有一家商场,有n件物品要卖,每件物品,必须在di天前卖出,才能获利pi元,每天只能卖一件商品,问你怎样安排,才能使得获利最大
解析:贪心,从截止日期最大的开始枚举天数,如果大于这个截止日期的就压到优先队列里面,优先队列每次拿出来的是最大价格的,这样来维护答案即可
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn = 1e5+100;
struct node
{
int p,d;
bool operator < (const node &b)const
{
return d>b.d;
}
}a[maxn];
int main(void)
{
int n;
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
scanf("%d %d",&a[i].p,&a[i].d);
sort(a,a+n);
priority_queue<int>q;
int ans = 0,j=0;
for(int i=a[0].d;i>0;i--)
{
for(;j<n&&a[j].d>=i;j++)
q.push(a[j].p);
while(!q.empty())
{
ans += q.top();
q.pop();
break;
}
}
printf("%d\n",ans);
}
return 0;
}