本题可以转化为一个匹配问题:将玩家和关卡进行最优配对,每位玩家至多挑战一个关卡,每个关卡至多被一位玩家挑战,目标是最大化挑战成功的关卡荣誉值总和。题目的匹配规则是:只有当玩家的能量值不低于关卡的能量门槛时,才能进行挑战。
一个高效的贪心策略如下:
在一款游戏中,共有 n 位玩家和 m 个挑战关卡。每位玩家拥有一个 extbf{能量值},每个关卡设有一个 extbf{荣誉值}和一个 extbf{能量门槛}。只有当玩家的能量值不低于关卡的能量门槛时,才能挑战该关卡。
每位玩家至多选择一个关卡进行挑战,每个关卡也至多被一位玩家挑战。现在需要决定挑战安排,使得所有成功挑战的关卡荣誉值总和最大。请你计算这个最大值。
约束条件:玩家数量 n 和关卡数量 m 满足 1≤n,m≤2×105。所有玩家的能量值、所有关卡的荣誉值和能量门槛均为不超过 109 的正整数。
第一行包含两个整数 n 和 m,分别表示玩家数量和关卡数量。 第二行包含 n 个整数,依次表示每位玩家的能量值。 接下来 m 行,每行包含两个整数,依次表示一个关卡的荣誉值和能量门槛。
输出一个整数,表示可以获得的最大荣誉值总和。
输入
2 2
10 20
8 10
5 15
输出
13
说明
共有 2 位朋友,金币数分别为 10 和 20;2 个房子,舒适度和价格分别为 (8,10) 和 (5,15)。
首先将朋友按金币从小到大排序:[10,20];房子按价格从小到大排序:[(10,8),(15,5)]。
1 个(舒适度 8),购买后获得舒适度 8。2 个(舒适度 5),购买后舒适度总和增加 5。最终最大舒适度总和为 8+5=13。
输入
1 2
5
100 10
200 20
输出
0
说明
只有 1 位朋友,金币数为 5;有 2 个房子,舒适度和价格分别为 (100,10) 和 (200,20)。
朋友的金币为 5,而所有房子的价格均大于 5,因此该朋友无法购买任何房子。最大舒适度总和为 0。
输入
3 2
100 200 300
40 50
60 150
输出
100
说明
3 位朋友的金币分别为 100, 200, 300;2 个房子信息为:舒适度 40 价格 50,舒适度 60 价格 150。
朋友按金币排序:[100,200,300];房子按价格排序:[(50,40),(150,60)]。
最终最大总和为 100。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册