码迷,mamicode.com
首页 > 其他好文 > 详细

POJ 3614

时间:2015-10-22 18:53:24      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:

POJ 3614

题目大意:奶牛美容:有C头奶牛日光浴,每头奶牛分别需要minSPF_i和maxSPF_i单位强度之间的阳光。现有L种防晒霜,分别能使阳光强度稳定为SPF_i,

其瓶数为cover_i。求最多满足多少头奶牛

贪心策略:现将奶牛的需求从小到大排列,防晒霜也这样排列,依次判断奶牛能否被防晒霜涂上,这样保证给了奶牛满足条件的最小需求。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <queue>
 4 #include <functional>
 5 using namespace std;
 6  
 7 pair<int, int> cow[2500 + 16];
 8 pair<int, int> bottle[2500 + 16];
 9 priority_queue<int, vector<int>, greater<int> > q;    // 优先级队列,小元素优先出队
10  
11 ///////////////////////////SubMain//////////////////////////////////
12 int main()
13 {
14     int C, L;
15     cin >> C >> L;
16     for (int i = 0; i < C; ++i)
17     {
18         cin >> cow[i].first >> cow[i].second;
19     }
20     for (int i = 0; i < L; ++i)
21     {
22         cin >> bottle[i].first >> bottle[i].second;
23     }
24     sort(cow, cow + C);
25     sort(bottle, bottle + L);
26     int cur = 0;    // 现在正等待涂防晒霜的奶牛的index
27     int result = 0;
28     for (int i = 0; i < L; ++i)
29     {
30         //只要奶牛非空并满足最小要求继续循环
31         while (cur < C && cow[cur].first <= bottle[i].first)
32         {
33             q.push(cow[cur].second);
34             ++cur;
35         }
36  
37         while (!q.empty() && bottle[i].second)
38         {
39             int maxSPF = q.top(); q.pop();
40             // “奶牛上限”比这一瓶的上限大,说明这头奶牛可以被涂上防晒霜
41             if (maxSPF >= bottle[i].first)
42             {
43                 ++result;
44                 --bottle[i].second;
45             }
46             // else 这头奶牛不能被涂上,因为bottle是按SPF排过序的,没有比这瓶更小的SPF了
47         }
48     }
49     cout << result << endl;
50 
51     return 0;
52 }

 

POJ 3614

标签:

原文地址:http://www.cnblogs.com/xlsryj/p/4901683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!