题号:NC255612
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld
题目描述
一片繁茂的树林
有

棵树木排成一排,第

棵树木的位置为

,高度为

,价值为

。
氧气少年现在需要砍伐树木,他遵守下面的规则进行砍伐,直到无法砍伐为止。
-
氧气少年可以从任意一棵树木开始砍伐。
-
从砍伐第二棵树开始,氧气少年只能选择上一棵被砍伐的树木的左侧或右侧的紧邻的未砍伐的树木进行砍伐。
-
从砍伐第二棵树开始,氧气少年砍伐的树木的高度必须严格小于上一棵被砍伐的树木的高度。
-
每当砍伐掉一棵树木时,氧气少年将获得这棵树木的价值。
阅读样例解释可以帮助理解上述过程。
请求出
氧气少年能获得的最大价值总和。
输入描述:
第一行包含一个整数
,表示测试用例的组数。
对于每组测试用例:
第一行包含一个整数
,表示树木的数量。
第二行包含
个整数
,表示每棵树木的高度。
第三行包含
个整数
,表示每棵树木的价值。
保证对于所有的测试用例,
的总和不超过
。
输出描述:
对于每组测试用例:
仅输出一行,包含一个整数,表示答案。