数字矩阵(秋季每日一题 3)
原创
©著作权归作者所有:来自51CTO博客作者sweetheart7_7的原创作品,请联系作者获取转载授权,否则将追究法律责任
给定一个
的整数矩阵,其中第
行第
列的元素为
。
你可以进行任意多次如下操作:
选择矩阵中的两个相邻元素,将它们均乘以
。
同一个元素可以被选中多次。
你需要通过上述操作,使得矩阵中所有元素的和尽可能大。
计算并输出这个和的最大可能值。
输入格式
第一行包含整数
,表示共有 
每组数据第一行包含两个整数
。
接下来
行,每行包含
个整数,表示整个矩阵,其中第
行第
列的数为
。
输出格式
每组数据输出一行结果,表示矩阵的所有元素的最大可能和。
数据范围



输入样例:
2
2 2
-1 1
1 1
3 4
0 -1 -2 -3
-1 -2 -3 -4
-2 -3 -4 -5
输出样例:
#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;
}