P13261 [GCJ 2014 #3] Last Hit

题目描述

Diana 需要你的帮助,在她最喜欢的游戏中尽可能赚取更多金币。她经常会遇到这样一种情况:她站在自己的防御塔附近,面对着 $\mathbf{N}$ 个怪物。在这种情况下,Diana 和防御塔轮流攻击怪物,且 Diana 先手。在她的回合中,Diana 可以选择攻击任意一个怪物(也可以选择跳过回合);在塔的回合中,塔会攻击距离它最近的存活怪物。 Diana 和塔都不能攻击已经死亡的怪物。 如果 Diana 攻击了某个怪物,则该怪物的生命值会减少 $\mathbf{P}$;如果塔攻击怪物,该怪物的生命值会减少 $\mathbf{Q}$。当怪物的生命值降到小于 1 时,它会被击杀。如果是 Diana 击杀了第 $i$ 个怪物,她将获得 $\mathbf{G}_{\mathrm{i}}$ 金币;如果是塔击杀了怪物,Diana 不会获得金币。 第 $i$ 个怪物初始生命值为 $\mathbf{H}_{\mathrm{i}}$。 怪物按照它们距离防御塔的远近顺序给出,也就是说,塔只有在编号小于 $i$ 的怪物都死亡之后,才会攻击第 $i$ 个怪物。 请你计算,Diana 最多可以获得多少金币?

输入格式

输入的第一行是测试用例数量 $\mathbf{T}$。接下来是 $\mathbf{T}$ 个测试用例。 每个测试用例第一行包含三个用空格分隔的整数,分别表示 $\mathbf{P}$、$\mathbf{Q}$ 和 $\mathbf{N}$。 接下来的 $\mathbf{N}$ 行中,第 $i$ 行包含两个用空格分隔的整数,分别表示第 $i$ 个怪物的生命值 $\mathbf{H}_{\mathrm{i}}$ 和金币奖励 $\mathbf{G}_{\mathrm{i}}$。

输出格式

对于每个测试用例,输出一行,格式为 `"Case #x: y"`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是 Diana 最多可以获得的金币数。

说明/提示

**样例说明** 在第二个样例中,Diana 应该放弃第一个怪物。她应在前两个回合中攻击第三个怪物,将其生命值削减至 80 点,然后她就可以轻松地拿到对第二个和第三个怪物的最后一击,从而获得两者的金币奖励。 ## 限制条件 - $1 \leq T \leq 100$ - $20 \leq \mathbf{P} \leq 200$ - $20 \leq \mathbf{Q} \leq 200$ - $1 \leq \mathbf{H}_{\mathrm{i}} \leq 200$ - $0 \leq \mathbf{G}_{\mathrm{i}} \leq 10^6$ ### Small 数据集(10 分) - 时间限制:~~60~~ 3 秒 - $1 \leq \mathbf{N} \leq 4$ ### Large 数据集(14 分) - 时间限制:~~120~~ 5 秒 - $1 \leq \mathbf{N} \leq 100$ 翻译由 ChatGPT-4o 完成