#CF2046A. 交换列并找一条路径
交换列并找一条路径
A. 交换列并找一条路径
每个测试点时间限制: 秒
每个测试点内存限制: 兆字节
有一个由 行 列组成的矩阵。行从上到下编号为 到 ,列从左到右编号为 到 。用 表示第 行第 列的格子。每个格子包含一个整数;初始时格子 中的整数为 。
你可以执行以下操作任意多次(可能为零次):
选择两列并交换它们(即选择两个整数 和 ,满足 ,然后交换 与 ,再交换 与 )。
执行完操作后,你必须选择一条从格子 到格子 的路径。对于路径上的每个格子(除最后一个外),下一个格子必须是 或 。显然,路径不能走出矩阵。
路径的代价是路径上所有格子(共 个)的整数之和。你需要执行操作并选择路径,使得代价尽可能大。
输入
每个测试包含多个测试用例。第一行包含整数 ()——测试用例的数量。
每个测试用例包含三行:
- 第一行包含一个整数 ()——矩阵的列数;
- 第二行包含 个整数 ()——矩阵的第一行;
- 第三行包含 个整数 ()——矩阵的第二行。
保证所有测试用例的 之和不超过 。
输出
对于每个测试用例,输出一行一个整数 —— 你能够获得的最大路径代价。
样例
输入
3
1
-10
5
3
1 2 3
10 -5 -3
4
2 8 5 3
1 10 3 4
输出
-5
16
29
样例解释
(图略)