UVA990 Diving for Gold
题目描述
## 题意
约翰是一名潜水寻宝者,他刚刚发现了一艘装满宝藏的海盗沉船。约翰乘坐的船上安装了精密的声呐系统,这套系统可以让约翰确定海底宝藏的位置、深度、包含金币的数量。不巧的是,约翰忘记了携带 ``GPS``
设备,因此无法记录沉船的位置以便将来打捞财宝,只能现在打捞。更糟糕的是,约翰身边只有一瓶压缩空气可用。约翰想使用这唯一的一瓶压缩空气潜入水底,将尽可能多的将金币打捞上来。现在需要你编写一个程序来帮助约翰,以便让他决定应该打捞哪些宝箱从而使得金币数量最大化。
本问题的限制条件如下:
1. 总共有 $n$ 个宝箱,${(d_1,v_1),(d_2,v_2),…,(d_n,v_n)}$,每个二元组表示宝箱的深度和包含的金币数
量。$n$ 最大为 $30$;
1. 压缩空气瓶只能让潜水者在水下保持 $t$ 秒。$t$ 最大为 $1000$;
1. 约翰每次潜水最多只能带上来一个宝箱;
1. 下潜所用时间 $td_i$ 和宝箱的深度 $d_i$ 线性相关:$td_i=w* d_i$,$w$ 是一个整数常数;
1. 上升所用时间 $ta_i$ 和宝箱的深度 $d_i$ 线性相关:$ta_i=2w* d_i$,$w $ 是一个整数常数;
1. 由于设备的限制,所有参数均为整数类型。
输入格式
输入包含多组数据,每组数据包含若干整数值。
每组数据的第一行包含两个整数 $t$ 和 $w$,分别表示潜水总时间和整数常数。
第二行表示宝箱的数量。接下来的输入行每行包含两个整数 $d_i$ 和 $v_i$,表示不同宝箱的深度和包含的金币数量。
每两组输入数据之间有一个空行。
输出格式
对于每组测试数据,输出的第一行包含一个整数,表示约翰在给定的条件下能够打捞的金币数量的最大值。
第二行表示能够打捞的宝箱数量。
接下来的每一行表示打捞上来的宝箱的深度及所包含的金币数。宝箱的输出顺序要与输入时给出的顺序一致。
在两组输入数据的输出之间输出一个空行。