Pagini recente » Istoria paginii runda/simulare-cartita-39 | Cod sursa (job #926621) | Cod sursa (job #916736) | Cod sursa (job #907596) | Cod sursa (job #2278763)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
long long calcSum(vector<vector<int>> x) {
long long sum = 0;
int length = x.size(), length2;
for(int i = 0; i < length; ++i) {
length2 = x[i].size();
for(int j = 0; j < length2; ++j)
sum += x[i][j];
}
return sum;
}
void reverseLine(vector<vector<int>> &x, int line) {
int length = x[line].size();
for(int j = 0; j < length; ++j)
x[line][j] *= -1;
}
void reverseCol(vector<vector<int>> &x, int col) {
int length = x.size();
for(int i = 0; i < length; ++i)
x[i][col] *= -1;
}
int main()
{
freopen("flip.in", "r", stdin);
freopen("flip.out", "w", stdout);
int n, m;
cin >> n >> m;
vector<vector<int>> x(n, vector<int>(m));
for (int i = 0; i < n; ++i) {
for(int j = 0; j < m; ++j)
cin >> x[i][j];
}
int maxdim = m + n, max_sum = -9999999;
long long limit = 1 << maxdim;
for (long long i = 1; i < limit - 1; ++i)
{
for(int k = 0; k < 2; ++k) {
int power = 1;
for (int j = 0; j < maxdim; ++j)
{
if (i & power) {
if(j >= n)
reverseCol(x, j - n);
else
reverseLine(x, j);
}
power <<= 1;
}
if(!k) {
int current = calcSum(x);
if(current > max_sum)
max_sum = current;
}
}
}
cout << max_sum;
return 0;
}