#tANXINlydlt00x0701. 防晒 Sunscreen

防晒 Sunscreen

奶牛日光浴问题

题目描述

CC 头奶牛进行日光浴,第 ii 头奶牛需要 minSPF[i]minSPF[i]maxSPF[i]maxSPF[i] 单位强度之间的阳光。

每头奶牛在日光浴前必须涂防晒霜,防晒霜有 LL 种,涂上第 ii 种之后,身体接收到的阳光强度就会稳定为 SPF[i]SPF[i],第 ii 种防晒霜有 cover[i]cover[i] 瓶。

求最多可以满足多少头奶牛进行日光浴。

输入格式

第一行输入整数 CCLL

接下来的 CC 行,按次序每行输入一头牛的 minSPFminSPFmaxSPFmaxSPF 值,即第 ii 行输入 minSPF[i]minSPF[i]maxSPF[i]maxSPF[i]

再接下来的 LL 行,按次序每行输入一种防晒霜的 SPFSPFcovercover 值,即第 ii 行输入 SPF[i]SPF[i]cover[i]cover[i]

每行的数据之间用空格隔开。

输出格式

输出一个整数,代表最多可以满足奶牛日光浴的奶牛数目。

输入输出样例 #1

输入 #1

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

输出 #1

2

输入输出样例 #2

输入 #2

5 3
1 3
2 4
3 5
4 6
5 7
2 2
3 1
5 2

输出 #2

4

限制条件

  • 1C,L25001 \le C, L \le 2500
  • 1minSPFmaxSPF10001 \le minSPF \le maxSPF \le 1000
  • 1SPF10001 \le SPF \le 1000

样例解释 #1

33 头奶牛:

  1. 奶牛 1:需要阳光强度在 [3,10][3, 10] 之间
  2. 奶牛 2:需要阳光强度在 [2,5][2, 5] 之间
  3. 奶牛 3:需要阳光强度在 [1,5][1, 5] 之间

22 种防晒霜:

  1. 防晒霜 1:SPF=6SPF = 6,有 22
  2. 防晒霜 2:SPF=4SPF = 4,有 11

最优分配方案:

  • 奶牛 1 使用防晒霜 1(6[3,10]6 \in [3, 10]
  • 奶牛 3 使用防晒霜 2(4[1,5]4 \in [1, 5]
  • 奶牛 2 无法使用任何防晒霜(没有 SPF[2,5]SPF \in [2, 5] 的防晒霜了)

最多可以满足 22 头奶牛。

解题思路

这是一个典型的贪心匹配问题:

  1. 将所有奶牛按照 minSPFminSPF 从大到小排序
  2. 将所有防晒霜按照 SPFSPF 从大到小排序
  3. 对于每头奶牛(按排序后的顺序),选择 SPFSPF 最大且不超过该奶牛 maxSPFmaxSPF 的防晒霜
  4. 如果找到合适的防晒霜且该防晒霜还有剩余,则分配给这头奶牛,计数加一

这样贪心的正确性在于:对于 minSPFminSPF 较大的奶牛,它们的选择范围较小,应该优先考虑;而对于 SPFSPF 较大的防晒霜,它们适用的奶牛范围也较小,应该优先使用。