題目鏈接: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;
}