【GDOI2016模拟4.5】刺客
Description
SillyHook是一个著名的刺客,虽然他比较Silly,但他精通打洞,善于深入敌方内部刺杀敌人。
现在SillyHook接到了若干个消灭敌人的任务,每次任务中他都会装备一把耐久度为m 的钩刃,并打洞潜入敌方内部。有n 个待消灭的敌人SillyHook消灭第i 个敌人需要消耗钩刃Ai 点耐久度(如果有其他武器则可以选择用其他武器消灭这个敌人,且不消耗钩刃耐久度),之后便得到他的武器,可以用来消灭任意Bi 个敌人。但SillyHook太Silly了,请你帮他求出每次任务最多可以消灭多少个敌人,且在消灭敌人数量最多的前提下使钩刃消耗的耐久度最少。
注意每次任务之间互不影响。
Input
第一行一个整数T,表示有T次任务。
对于每组数据,第一行包含两个正整数n,m 表示目标数和钩刃的初始耐久度。
接下来n 行每行两个正整数Ai,Bi ,意义如题目所述。
Output
每次任务一行两个整数,表示这次任务中最多能消灭的敌人数量,以及钩刃最少消耗的耐久度。
Sample Input
2
3 5
4 1
5 1
7 7
2 1
2 2
4 0
Sample Output
3 4
0 0
Data Constraint
30%的数据满足Bi=0 。
存在20% 的数据满足n<=10 。
100%的数据满足T<=10,1<=n<=105,1<=m<=109,0<=Ai<=109,0<=Bi<=10。
题解
首先这题显然是贪心。
先讲讲我考场上错误的思路,就是首先舍弃一部分耐久杀掉一个有刀且Ai最小的敌人(如果有刀且 A [ i ] A[i] A[i]最小的敌人的 A [ i ] > m A[i]>m A[i]>m那么就把只能所有人敌人当作 B [ i ] = 0 B[i]=0 B[i]=0的杀了,也就是直接从小到大杀),之后再用拿到的刀按 A i Ai Ai从大到小杀剩下有刀的敌人,再拿总共拿到的刀按 A i Ai Ai从大到小杀完刀的次数,然后拿最后剩的耐久再按