Pagini recente » Cod sursa (job #546845) | Cod sursa (job #206898) | Cod sursa (job #1715478) | Cod sursa (job #187696) | Cod sursa (job #3353058)
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
const int DMAX = 16;
int mat[DMAX + 1][DMAX + 1],
cand[DMAX + 1][DMAX + 1];
int n, m;
void ReadMatrix()
{
f >> n >> m;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
f >> mat[i][j];
}
void FlipRow(int row)
{
for(int j = 1; j <= m; j++)
cand[row][j] *= (-1);
}
int GetMaxSum()
{
int sum = 0;
for(int j = 1; j <= m; j++)
{
int sumCol = 0;
for(int i = 1; i <= n; i++)
sumCol += cand[i][j];
if(sumCol < 0)
sumCol *= (-1);
sum += sumCol;
}
return sum;
}
void GenSubsets()
{
int sumMax = 0;
for(int mask = 0; mask < (1 << n); mask++)
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
cand[i][j] = mat[i][j];
for(int i = 1; i <= n; i++)
if(mask & (1 << (i - 1)))
FlipRow(i);
int sum = GetMaxSum();
if(sum > sumMax)
sumMax = sum;
}
g << sumMax << '\n';
}
int main()
{
ReadMatrix();
GenSubsets();
f.close();
g.close();
return 0;
}