poj3614 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
The cows have a picnic basket with L
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 }