给定一个 数字矩阵(秋季每日一题 3)_思维题 的整数矩阵,其中第 数字矩阵(秋季每日一题 3)_i++_02 行第 数字矩阵(秋季每日一题 3)_i++_03 列的元素为 数字矩阵(秋季每日一题 3)_i++_04

你可以进行任意多次如下操作:

选择矩阵中的两个相邻元素,将它们均乘以 数字矩阵(秋季每日一题 3)_数据_05

同一个元素可以被选中多次。

你需要通过上述操作,使得矩阵中所有元素的和尽可能大。

计算并输出这个和的最大可能值。

输入格式
第一行包含整数 数字矩阵(秋季每日一题 3)_思维题_06,表示共有 数字矩阵(秋季每日一题 3)_思维题_06

每组数据第一行包含两个整数 数字矩阵(秋季每日一题 3)_数据_08

接下来 数字矩阵(秋季每日一题 3)_思维题_09 行,每行包含 数字矩阵(秋季每日一题 3)_i++_10 个整数,表示整个矩阵,其中第 数字矩阵(秋季每日一题 3)_i++_02 行第 数字矩阵(秋季每日一题 3)_i++_03 列的数为 数字矩阵(秋季每日一题 3)_i++_04

输出格式
每组数据输出一行结果,表示矩阵的所有元素的最大可能和。

数据范围
数字矩阵(秋季每日一题 3)_思维题_14
数字矩阵(秋季每日一题 3)_思维题_15
数字矩阵(秋季每日一题 3)_数据_16

输入样例:

2
2 2
-1 1
1 1
3 4
0 -1 -2 -3
-1 -2 -3 -4
-2 -3 -4 -5

输出样例:

2
30

#include<iostream>

using namespace std;

int main(){

int t;
cin >> t;
while(t--){

int n, m;
cin >> n >> m;

int x;
int mi = 1e8, sum = 0, cnt = 0;
for(int i = 0; i < n * m; i++){

cin >> x;
if(x < 0) cnt++;
mi = min(mi, abs(x));
sum += abs(x);
}

if(cnt % 2) cout << sum - 2 * mi << endl;
else cout << sum << endl;
}

return 0;
}