洛谷 [P2887] 防晒霜
贪心
首先以 miSPF 为关键字降序排列,然后对于每一头奶牛寻找满足范围的 SPF 值最大的防晒霜用,
我们发现,因为已经按最小值降序排列,所以对于下界来说若当前奶牛满足,之后的奶牛肯定满足,对上界来说,
对于 SPF[x] < SPF[y] 来说,只可能 x,y 都满足, x,y 都不满足, 或 x 满足 y 不满足.所以选最大的肯定更优
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
const int MAXN = 3005;
struct cow{
int ma, mi;
bool operator < (const cow & b) const {
if(mi != b.mi) return mi > b.mi;
else return ma > b.ma;
}
}a[MAXN];
int n, m, cnt[MAXN], wei[MAXN], ans;
int main() {
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> a[i].mi >> a[i].ma;
}
for(int i = 1; i <= m; i++) {
cin >> wei[i] >> cnt[i];
}
sort(a + 1, a + 1 + n);
for(int i = 1; i <= n; i++) {
int ma = 0, k = 0;
for(int j = 1; j <= m; j++) {
if(cnt[j]) {
if(wei[j] >= a[i].mi && wei[j] <= a[i].ma) {
if(wei[j] > ma) {
ma = wei[j];
k = j;
}
}
}
}
if(ma) {
cnt[k]--; ans++;
}
}
cout << ans << endl;
return 0;
}