SP12557 CDC12_B - Basic Routines
题目描述
Ronny 刚下班,经历了糟糕的交通状况。他放下车钥匙,决定躺下来思考一下要做的事情。他很快意识到,每项活动所需的能量不同。Ronny 计划了 $N$ 项活动,每项活动都有一个名称和消耗的能量值。此外,每完成一项活动,他会根据已经完成的活动数量恢复能量。例如,Ronny 有 80 点能量,如果活动 X 消耗 Y 点能量,那么他完成后会有 $80 - Y + 1$ 点能量。如果他再做一项消耗 Z 点能量的活动,他的能量会变为 $(80 - Y + 1) - Z + 2$ 点。Ronny 的能量不能低于 0 点。
Ronny 意识到他可能无法完成所有的活动。你的任务是帮他选择一组可以完成的活动,并让他的能量不低于 0 点。详细的要求请参见后续输出格式说明。
输入格式
第一行是一个整数 $T$,表示测试用例的数量。接下来是 $T$ 组测试用例的描述。每组测试用例首先包含两个整数 $N$ 和 $E$,分别表示 Ronny 计划的活动数量和他的初始能量。接下来的 $N$ 行中,每行有一个字符串 $A$ 和一个整数 $V$,分别表示活动的名称和消耗的能量。
数据从标准输入读取。
输出格式
对于每个测试用例,输出两行。第一行格式为 `Scenario #i: `,其中 $i$ 是测试用例编号(从 1 开始)。紧跟其后是 Ronny 能够完成的最大活动数量。第二行是按名称排序的活动列表(实际执行顺序可以不一样),每个名称后面要有空格。
如果有多种可能的解,输出消耗能量最少的活动子集。如果仍然有多个解,则输出字母序最小的活动序列。
输出结果写入标准输出。
说明/提示
- $1 \le T \le 10$
- $1 \le N \le 20$
- $1 \le E \le 1000$
- $1 \le V \le 100$
**示例输入**
```
2
5 80
CleanClothes 45
MakeFood 40
Shower 10
EatFood 20
WatchTv 5
4 80
Gaming 20
TVShow 30
ScoreSomeCoke 20
DrinkCoke 10
```
**示例输出**
```
Scenario #1: 4
EatFood MakeFood Shower WatchTv
Scenario #2: 4
DrinkCoke Gaming ScoreSomeCoke TVShow
```
**本翻译由 AI 自动生成**