#arc0273. [arc027_3]最高のトッピングにしような

[arc027_3]最高のトッピングにしような

问题描述

在我经常光顾的餐馆里,通过用餐可以获得门票。

门票有两种类型:必须与配料交换的特殊门票和普通门票。

这家餐馆有N种配料,配料i可以通过交换ti张门票获得。在这家餐馆中,可以通过组合门票来获得多种类型的配料,但不能多次获得相同的配料。

在交换过程中,特殊门票和普通门票都被视为1张门票,但交换所使用的门票必须至少包含一张特殊门票。例如,如果有一种配料可以用4张门票交换,那么有以下4种交换方法:

  • 1张特殊门票和3张普通门票的组合。
  • 2张特殊门票和2张普通门票的组合。
  • 3张特殊门票和1张普通门票的组合。
  • 4张特殊门票的组合。

此外,每种配料都有一个正整数值,表示获得该配料时的愉悦程度,记为hi。

今天是特别的一天,我想通过合理利用手中的门票来最大化获得配料的愉悦值总和。根据门票和配料的信息,编写一个程序来求解可能的最大愉悦值总和。


输入

输入通过标准输入以以下格式给出。

X Y N t1 h1 t2 h2 : tN hN

  • 第一行包含两个整数X(1 ≤ X ≤ 300)和Y(0 ≤ Y ≤ 300),用空格分隔。这表示我一开始有X张特殊门票和Y张普通门票。
  • 第二行包含一个整数N(1 ≤ N ≤ 300),表示配料的种类数。
  • 第三行到第N+2行包含配料的相关信息,每行包含两个整数ti(1 ≤ ti ≤ 600)和hi(1 ≤ hi ≤ 5,000,000),用空格分隔。这表示配料i可以通过交换ti张门票获得,并且获得此配料可以获得的愉悦程度为hi。

部分分

本问题设置有部分分。

  • 对于满足X ≤ 50、Y ≤ 50、N ≤ 50、ti ≤ 100(1 ≤ i ≤ N)的数据集1,如果能够求解正确,则给予30分。
  • 对于没有附加限制的数据集2,如果能够求解正确,则额外给予70分。

输出

请输出可能的最大愉悦值总和,单独为一行。输出末尾要换行。


示例1

输入示例

3 5
4
3 30
3 40
5 60
7 80

输出示例

100

初始状态下,我有3张特殊门票和5张普通门票。通过以下交换,可以达到最大值100(= 40 + 60)。

  • 用1张特殊门票和2张普通门票,交换得到配料2。配料2的愉悦度为40。
  • 用2张特殊门票和3张普通门票,交换得到配料3。配料3的愉悦度为60。

这种方法消耗了3(= 1 + 2)张特殊门票和5(= 2 + 3)张普通门票,因此是可行的。


示例2

输入示例

3 3
4
3 30
3 40
5 60
7 80

输出示例

70

最佳选择是获得配料1和配料2。


示例3

输入示例

1 5
4
3 30
3 40
5 60
7 80

输出示例

60

最佳选择是获得配料3,并剩余1张门票。


示例4

输入示例

6 12
4
3 30
3 40
5 60
7 80

输出示例

210

可以获得所有配料。