时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld
题目描述
——
氧气少年将

枚宝石排成一排,有的是普通宝石,有的是魔法宝石。第

颗普通宝石的价值为

,第

颗魔法宝石的价格为

。
氧气少年每次可以进行下面的操作:
-
选择任意两颗相邻的魔法宝石(中间没有未消去的魔法宝石)并将它们买下,然后将这两颗魔法宝石以及它们之间的普通宝石全部消去,并获得它们之间的普通宝石的全部价值。
编号为

的魔法宝石和编号为

的魔法宝石相邻是指:编号为

的魔法宝石和编号为

的魔法宝石之间没有任何没被消去的魔法宝石。
将编号为

的魔法宝石和编号为

的魔法宝石买下是指:花费

的钱数将它们买下。
将宝石消去后,其它宝石的编号不受影响。
阅读样例解释有助于理解上述过程。
现在,
氧气少年拥有的钱数为

。请求出他能获得的最大价值。
输入描述:
第一行包含一个整数
,表示测试用例的组数。
对于每组测试用例:
第一行包含两个整数
,表示宝石的数量和氧气少年拥有的钱数。
接下来
行,每行包含两个整数
。
- 如果
,那么此宝石为普通宝石。假设当前普通宝石为第
颗普通宝石,那么称它为编号为
的普通宝石,它的价值
; - 如果
,那么此宝石为魔法宝石。假设当前魔法宝石为第
颗魔法宝石,那么称它为编号为
的魔法宝石,它的价格
。
保证对于所有的测试用例,
的总和不超过
。
输出描述:
对于每组测试用例:
仅输出一行,包含一个整数,表示答案。