问题 5030 --计划带师

5030: 计划带师

题目描述

  小 Y 是某高中的一名学生。他在欢乐地度过暑假的时候,突然发现他有些作业的截止时间快到了。但是小 Y 还没开始做。
如果一个作业,小 Y 提交时间超过截止时间 $X$ 天,那么他就会被扣掉 $X$ 分。对于每个作业,小 Y 要花费一天或若干天来完成。他不能同时完成多个作业且只有当前作业完成了,他才会开始另一个新的作业。
形式化地说,对于截止时间在第 $D$ 天的作业,如果小 Y 在第 $P$ 天的最后完成了这项作业(第一项作业从第 $1$ 天开始计算),那么会被扣 $\max(0,P-D)$ 分。
小 Y 不想被扣太多分,所以他想知道如果规划完成作业的顺序使得被扣掉的分最少。同时在保证被扣掉的分最少的前提下,还需要保证输出方案的字典序最小(将每个作业的名称看成序列的元素,然后一个名称一个名称地比较字典序来得到方案的字典序大小)。请你帮帮小 Y。

输入

本题的每个测试点包含多组数据。
输入第一行为一个整数 $T$,表示数据组数。
对于每组数据,第一行为一个整数 $n$,表示课程数目。
接下来 $n$ 行,每行包含一个字符串 $S$($|S| \leq 50$)代表课程名称和两个整数 $D$(截止时间)和 $C$ 完成作业需要时间。
你需要假定,给定的所有字符串已经按字典序排好,即在输入顺序中越靠前的字典序越小。

输出

对于每组数据,第一行输出最少扣分。
接下来 $n$ 行,按顺序输出完成的作业对应的课程名称。

样例输入输出

输入#1 复制
2 
3 
Computer 3 3 
English 20 1 
Math 3 2 
3
Computer 3 3 
English 6 3 
Math 6 3
输出#1 复制
2 
Computer 
Math 
English 
3 
Computer 
English 
Math

提示

对于 $30\%$ 的数据,$n \leq 10$;
对于 $60\%$ 的数据,$n \leq 17$;
对于 $60\%$ 的数据,$T \leq 3$;
对于 $100\%$ 的数据: $1\leq n \leq 20$ , $1 \leq T \leq 10$ , $ 1\leq D,C \leq 1000$。

序号 标题 作者 发表时间 费用 订购数 操作