AC情况:
贪心算法关键还是要自己根据题意找出最优的算法,这题主要是根据防晒霜按从小到大排,然后根据防晒霜找牛,如果找到某牛的最低SPF标准比防晒霜的低,且他的最高SPF是目前牛里最小的,就优先给他用。
把牛和防晒霜排序,用到了sort()函数。之后再把用防晒霜 spf[i] 筛选出来的牛放进优先队列q中,q按照牛的最大SPF 从大到小排序。
#include<iostream>
#include<algorithm>
#include<queue>
#include<functional>
using namespace std;
pair<int, int> cow[2505];
pair<int, int> spf[2505];
priority_queue<int, vector<int>, greater<int> > q;
int main() {
int C, L, i;
scanf("%d %d", &C, &L);
for (i = 0; i < C; i++)
scanf("%d %d", &cow[i].first, &cow[i].second);
sort(cow, cow + C);
for (i = 0; i < L; i++)
scanf("%d %d", &spf[i].first, &spf[i].second);
sort(spf, spf + L);
int j = 0, sum = 0, t;
for (i = 0; i < L; i++) {
while (j < C&&cow[j].first <= spf[i].first) {
q.push(cow[j].second);
j++;
}
while ((!q.empty()) && spf[i].second) {
t = q.top();
q.pop();
if (t >= spf[i].first) {
sum++;
spf[i].second--;
}
}
}
printf("%d\n", sum);
return 0;
}