P13367 [GCJ 2011 #1A] Pseudominion
题目描述
你正在玩一款使用特殊卡牌的游戏。每张卡牌都有三个奖励数值:卡牌奖励 $c$,得分奖励 $s$,回合奖励 $t$。有些卡牌一开始就在你手中,其余的卡牌则在桌上的牌堆中。你从 $1$ 个回合开始。
在每个回合中,你可以从手牌中选择任意一张卡牌并打出。如果这张卡牌的奖励数值为 $c$,$s$,$t$,则会发生以下事件:
- 这张卡牌会从你的手牌中移除,且之后不能再使用。
- 你从牌堆顶依次抽取 $c$ 张卡牌加入手牌。如果牌堆中剩余的卡牌数少于 $c$,则全部抽取。
- 你的总得分增加 $s$。
- 你的剩余回合数增加 $t$。
如果在某个回合开始时你手中没有任何卡牌,则该回合不会发生任何事情。你的目标是在回合数耗尽之前获得尽可能高的分数。
例如,假设你的手牌和牌堆包含如下卡牌:
```
+---+---+---+ +---+---+---+
HAND: | c | s | t | DECK: | c | s | t |
+---+---+---+ +---+---+---+
Card #1: | 0 | 0 | 2 | Card #4: | 1 | 1 | 0 |
Card #2: | 0 | 5 | 0 | Card #5: | 0 | 1 | 1 |
Card #3: | 2 | 1 | 1 | Card #6: | 2 | 2 | 0 |
+---+---+---+ +---+---+---+
```
下表展示了你如何通过这些卡牌获得 $8$ 分的得分。前三列分别表示你打牌前的手牌、剩余回合数和得分,最后一列表示你选择打出的卡牌编号。
```
+---------+------------+-------+------+
| Hand | Turns left | Score | Play |
+---------+------------+-------+------+
| 1, 2, 3 | 1 | 0 | 1 |
| 2, 3 | 2 | 0 | 3 |
| 2, 4, 5 | 2 | 1 | 2 |
| 4, 5 | 1 | 6 | 5 |
| 4 | 1 | 7 | 4 |
| 6 | 0 | 8 | - |
+---------+------------+-------+------+
```
可以看到,卡牌奖励和回合奖励可以让你连续打出多张卡牌,直到无法继续为止。
输入格式
第一行输入一个整数 $T$,表示测试用例的数量。接下来有 $T$ 组测试用例。
每组测试用例的第一行包含一个整数 $N$,表示你手中的卡牌数量。接下来的 $N$ 行,每行包含三个整数 $c$、$s$、$t$,分别表示一张手牌的奖励数值。
然后输入一行,包含一个整数 $M$,表示牌堆中的卡牌数量。接下来的 $M$ 行,每行包含三个整数 $c$、$s$、$t$,分别表示一张牌堆卡牌的奖励数值。这些卡牌的顺序即为你抽取它们的顺序。
输出格式
对于每个测试用例,输出一行,格式为 “Case #x: $S$”,其中 $x$ 表示测试用例编号(从 $1$ 开始),$S$ 表示在回合数耗尽前你能获得的最大得分。
说明/提示
**数据范围**
- $1 \leq T \leq 100$。
- $1 \leq N$。
- $0 \leq M$。
- $N + M \leq 80$。
**小数据(15 分,测试点 1 - 可见)**
- $0 \leq c \leq 1$。
- $0 \leq s \leq 20$。
- $0 \leq t \leq 20$。
- 时间限制:~~30~~ 6 秒。
**大数据(35 分,测试点 2 - 隐藏)**
- $0 \leq c \leq 2$。
- $0 \leq s \leq 50$。
- $0 \leq t \leq 50$。
- 时间限制:~~60~~ 12 秒。
由 ChatGPT 4.1 翻译