Sunscreen (poj 3614 贪心+优先队列)


Language: Default
Sunscreen
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 4499   Accepted: 1565

Description

To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her hide with sunscreen when they're at the beach. Cow i has a minimum and maximum SPF rating (1 ≤ minSPFi ≤ 1,000;minSPFi ≤ maxSPFi ≤ 1,000) that will work. If the SPF rating is too low, the cow suffers sunburn; if the SPF rating is too high, the cow doesn't tan at all........

The cows have a picnic basket with L (1 ≤ L ≤ 2500) bottles of sunscreen lotion, each bottle i with an SPF rating SPFi (1 ≤ SPFi ≤ 1,000). Lotion bottle i can cover coveri cows with lotion. A cow may lotion from only one bottle.

What is the maximum number of cows that can protect themselves while tanning given the available lotions?

Input

* Line 1: Two space-separated integers: C and L
* Lines 2..C+1: Line i describes cow i's lotion requires with two integers: minSPFi and maxSPFi 
* Lines C+2..C+L+1: Line i+C+1 describes a sunscreen lotion bottle i with space-separated integers: SPFi and coveri

Output

A single line with an integer that is the maximum number of cows that can be protected while tanning

Sample Input

3 2
3 10
2 5
1 5
6 2
4 1

Sample Output

2

Source

USACO 2007 November Gold


题意:有c头牛晒太阳,每头牛都有一个能承受辐射的范围(min~max),现在有 l 种防晒霜,每种防晒霜都能将辐射值固定在spf,每种防晒霜都有一定的数量num。每头牛用最多一种防晒霜,问能满足多少斗牛。

思路:贪心,首先防晒霜按照spf从小到大排序,牛也按照能承受的最小值从小到大排序。然后对于每种防晒霜 将牛的最小值 小于等于 该种防晒霜spf值的牛入队列(只如它承受范围的最大值),然后较小者先出队列。

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#pragma comment (linker,"/STACK:102400000,102400000")
#define maxn 3005
#define MAXN 2005
#define mod 1000000009
#define INF 0x3f3f3f3f
#define pi acos(-1.0)
#define eps 1e-6
#define lson rt<<1,l,mid
#define rson rt<<1|1,mid+1,r
#define FRE(i,a,b)  for(i = a; i <= b; i++)
#define FREE(i,a,b) for(i = a; i >= b; i--)
#define FRL(i,a,b)  for(i = a; i < b; i++)
#define FRLL(i,a,b) for(i = a; i > b; i--)
#define mem(t, v)   memset ((t) , v, sizeof(t))
#define sf(n)       scanf("%d", &n)
#define sff(a,b)    scanf("%d %d", &a, &b)
#define sfff(a,b,c) scanf("%d %d %d", &a, &b, &c)
#define pf          printf
#define DBG         pf("Hi\n")
typedef long long ll;
using namespace std;

struct Cow
{
    int l,r;
}cow[maxn];

struct Sunscreen
{
    int p,num;
}s[maxn];

int c,l;

int cmp1(Cow a,Cow b)
{
    return a.l,greater >Q;

int main()
{
    int i,j,t;
    while (~sff(c,l))
    {
        FRL(i,0,c)
        sff(cow[i].l,cow[i].r);
        FRL(i,0,l)
        sff(s[i].p,s[i].num);
        sort(cow,cow+c,cmp1);
        sort(s,s+l,cmp2);
        int ans=0;
        i=j=0;
        FRL(j,0,l)
        {
            while (i


你可能感兴趣的:(贪心,数据结构,ACM,Sunscreen,poj,3614,贪心+优先队列)