b_lc_吃苹果的最大数目(贪心:先吃快过期的苹果)

在第 i 天,树上会长出 apples[i] 个苹果,这些苹果将会在 days[i] 天后腐烂,变得无法食用。我打算每天 最多 吃一个苹果。注意,你可以在这 n 天之后继续吃苹果。返回你可以吃掉的苹果的最大数目。

思路:先吃快过期的苹果

class Solution {
public:
    struct node {
        int c,r; //c表示数量,r表示它能持续到第几天
        bool operator<(const node& b) const {
            return r>b.r;
        }
    };
    int eatenApples(vector<int>& A, vector<int>& D) {
        int n=A.size(), ans=0;
        priority_queue<node> q;
        for (int cur=0; cur<n || !q.empty(); cur++) {
            if (cur<n && A[cur]) q.push({A[cur], cur+D[cur]});
            while (!q.empty() && q.top().r<=cur) q.pop();
            if (!q.empty()) {
                node a=q.top(); q.pop();
                if (a.c>0) {
                    ans++;
                    if (--a.c>0) q.push(a);
                }
            }
        }
        return ans;
    }
};
posted @ 2020-12-27 15:47  童年の波鞋  阅读(94)  评论(0编辑  收藏  举报