比如说一个矩阵
1 -2 3
1 2 3
1 2 3
我们想让(1,2)的-2变号成2
则可以通过将(1,1)和(1,2)一起变号成为-1,2
然后再将(1,1)和(2,1)一起变号成1,-1
这样就完成了将(1,1)不变,而让(1,2)和(2,1)变号
所以说变号不仅是能将其相领的元素一起变号,还可以扩充到左上左下右上右下四个方向
再推下去 每对同时变号的元素可以处于矩阵的任何两个位置
所以只要统计矩阵中有多少个负号,如果负号的数量是奇数,就证明必须有一个元素是负号,让绝对值最小的是负号就行
如果是偶数,就证明所有数都可以变成正号
#include <bits/stdc++.h>
using namespace std;
const int N=15;
void solve(){
int n,m;
cin>>n>>m;
int cnt=0,sum=0;
int mn=1e9;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
int a;
cin>>a;
sum+=abs(a);
if(a<0) cnt++;
mn=min(abs(a),mn);
}
}
sum-=mn*2*(cnt%2);
cout<<sum<<endl;
}
int main(){
int t;
cin>>t;
while(t--) solve();
}
如果数列中有一个是0的话,那是不是可以把0与那个负数交换符号,也就是说,先考虑有没有0,有0的话不考虑负数的个数是奇数还是偶数
有0的话,减的就是0
哦哦好的,谢谢