poj1456 Supermarket【優先隊列】

題目鏈接: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;
}
發佈了361 篇原創文章 · 獲贊 28 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章