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;
}
};