Pagini recente » Cod sursa (job #2423704) | Cod sursa (job #229202) | Cod sursa (job #78710) | Borderou de evaluare (job #1291206) | Cod sursa (job #1871494)
#include <fstream>
#include <vector>
std::ifstream fin("flip.in");
std::ofstream fout("flip.out");
std::vector<std::vector<int>> table;
std::vector<int> line;
#define MAX 17
int combinari[MAX] = {};
long long outputsum;
int n, m;
int linesum;
int linesumNegative;
int columnsum;
int i, j;
bool switched;
void sumMatrix(std::vector<std::vector<int>> table, int lenLine, int lenCol)
{
long long sum = 0;
for (auto i = 0; i < lenCol; i++)
{
columnsum = 0;
linesumNegative = 0;
for (auto j = 0; j < lenLine; j++)
{
if (switched)
{
if (combinari[j] == 1)
{
columnsum -= table[i][j];
}
else columnsum += table[i][j];
}
else
{
if (combinari[j] == 1)
{
columnsum -= table[j][i];
}
else columnsum += table[j][i];
}
}
if (columnsum < 0)
{
sum -= columnsum;
}
else sum += columnsum;
}
if (sum>outputsum)
{
outputsum = sum;
}
}
void genComb(int k)
{
for (auto i = 0; i <= 1; i++)
{
combinari[k] = i;
if (k == n - 1)
{
if (switched)
{
sumMatrix(table, n, m);
}
else sumMatrix(table, n, m);
}
else
{
genComb(k + 1);
}
}
}
int main(void)
{
long long sum = 0;
fin >> n >> m;
for (auto i = 0; i < n; i++)
{
line.clear();
for (auto j = 0; j < m; j++)
{
int x;
fin >> x;
line.push_back(x);
sum += x;
}
table.push_back(line);
}
outputsum = sum;
if (n>m)
{
m ^= n;
n ^= m;
m ^= n;
switched = true;
}
genComb(0);
fout << outputsum;
}