洛谷 [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;
}
posted @ 2018-03-21 11:32  Mr_Wolfram  阅读(164)  评论(0编辑  收藏  举报