//给一个矩阵,每次把两列数取反,可以操作无限次
//问矩阵和最大值
#include <bits/stdc++.h>
using namespace std;
int mp[1003][1003];//矩阵
int tot=0,sl[1003];//总和,每列和
int main(){
int n;cin>>n;//阶
for(int i=0;i<n;i++){//行
for(int j=0;j<n;j++){//列
cin>>mp[i][j];//输入(其实可以不开数组存)
tot+=mp[i][j];//求总和
sl[j]+=mp[i][j];//求列和
}
}
sort(sl,sl+n);//排序
for(int i=0;i<n;i+=2){//每次和负得最多的两列操作
if(sl[i]+sl[i+1]<0)tot-=2*(sl[i]+sl[i+1]);
}//如果两列和是负数,总和减去两倍的这两个列和即可(负负得正)
cout<<tot<<endl;
return 0;
}
样例输入
4
-1 1 1 2
-2 -3 1 2
-3 -2 1 2
-4 -1 1 2
样例输出
27
校选拔赛D题
最新推荐文章于 2021-03-11 21:11:38 发布