1. 程式人生 > >poj3614 Sunscreen【貪心】

poj3614 Sunscreen【貪心】

Sunscreen
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 11772   Accepted: 4143

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頭牛,每頭牛有一個區間。有l種防晒霜,每種有一個spf值和對應的瓶數。牛隻能用在他區間內的防晒霜。問最多能有多少牛被塗。

思路:

按minspf排序,每次取minspf最高的一頭牛,給他安排可以被安排的spf值最高的防晒霜。

因為我們這樣排了序之後,能給minspf高的牛用的防晒霜肯定也能給minspf低一些的牛用。

這時候就要儘量用spf值高的。

 

 1 #include <iostream>
 2 #include <set>
 3 #include <cmath>
 4 #include <stdio.h>
 5 #include <cstring>
 6 #include <algorithm>
 7 #include <vector>
 8 #include <queue>
 9 #include <map>
10 //#include <bits/stdc++.h>
11 using namespace std;
12 typedef long long LL;
13 #define inf 0x7f7f7f7f
14 
15 int c, l;
16 const int maxn = 2505;
17 struct lotion{
18     int spf;
19     int cover;
20 }lo[maxn];
21 struct mow{
22     int minspf, maxspf;
23 }cow[maxn];
24 
25 bool cmpcow(mow a, mow b)
26 {
27     if(a.minspf == b.minspf){
28         return a.maxspf < b.maxspf;
29     }
30     return a.minspf < b.minspf;
31 }
32 
33 bool cmplo(lotion a, lotion b)
34 {
35     return a.spf < b.spf;
36 }
37 
38 int main()
39 {
40     while(scanf("%d%d", &c, &l) != EOF){
41         for(int i = 0; i < c; i++){
42             scanf("%d%d", &cow[i].minspf, &cow[i].maxspf);
43         }
44         //cout<<cow[0].minspf<<" "<<cow[0].maxspf<<endl;
45         for(int i = 0; i < l; i++){
46             scanf("%d%d", &lo[i].spf, &lo[i].cover);
47         }
48         sort(cow, cow + c, cmpcow);
49         //cout<<cow[0].minspf<<" "<<cow[0].maxspf<<endl;
50         sort(lo, lo + l, cmplo);
51 
52         int cnt = 0;
53         for(int i = c - 1; i >= 0; i--){
54             for(int j = l - 1; j >= 0; j--){
55                 if(lo[j].spf < cow[i].minspf)break;
56                 if(lo[j].spf <= cow[i].maxspf && lo[j].cover > 0 && lo[j].spf >= cow[i].minspf){
57                     lo[j].cover--;
58                     cnt++;
59                     break;
60                 }
61             }
62         }
63         printf("%d\n", cnt);
64     }
65     return 0;
66 }