Supermarket(貪心)

ruoye123456發表於2024-09-16
#include<bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef long long ll;
typedef pair<int,int> PII;
void solve()
{
    int n;
    while(cin>>n)
    {
        vector<PII> a(n);
        for(int i=0;i<n;++i) cin>>a[i].y>>a[i].x;
        sort(a.begin(),a.end());
        //對於前t天選擇可以選擇的最大t個物品
        //建立小根堆,若當前物品的過期日期<=t則判斷是否更換堆頂
        //否則直接插入堆
        priority_queue<int,vector<int>,greater<int>> q;
        //t表示已經考慮完了多少天
        int t = 0;
        for(int i=0;i<n;++i)
        {
            if(a[i].x == t)
            {
                if(a[i].y > q.top()) 
                {
                    //cout<<"1. "<<a[i].y<<' '<<q.top()<<'\n';
                    q.pop();
                    q.push(a[i].y);
                }
            }
            else if(a[i].x > t) 
            {
                //cout<<"2. "<<a[i].y<<'\n';
                q.push(a[i].y), t++;
            }
        }
        ll res = 0;
        while(!q.empty())
        {
            res += q.top();
            //cout<<"res "<<q.top()<<'\n';
            q.pop();
        }
        cout<<res<<'\n';
    }
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T = 1;
    //cin>>T;
    while(T--)
    {
        solve();
    }
}

相關文章