Pagini recente » investijuan | Cod sursa (job #1551650) | Autentificare | Cod sursa (job #164091) | Cod sursa (job #2329540)
#include <fstream>
#include <iostream>
#define len 17
using namespace std;
ifstream in("flip.in");
ofstream out("flip.out");
short N, M, sol[len * 2 - 1];
int mat[len][len], smax;
int sum()
{
int s = 0;
for(short i = 1; i <= N; ++i)
for(short j = 1; j <= M; ++j)
s += mat[i][j];
return s;
}
void comutare_linie(short l)
{
for(short i = 1; i <= M; ++i)
mat[l][i] *= -1;
}
void comutare_coloana(short c)
{
for(short i = 1; i <= N; ++i)
mat[i][c] *= -1;
}
void back(short k)
{
for(short i = sol[k - 1] + 1; i <= N + M; ++i)
{
sol[k] = i;
for(short i = 1; i <= k; ++i)
if(sol[i] <= N)
comutare_linie(sol[i]);
else comutare_coloana(sol[i] - N);
smax = max(smax, sum());
if(k < N + M)
back(k + 1);
}
}
int main()
{
in >> N >> M;
for(short i = 1; i <= N; ++i)
for(short j = 1; j <= M; ++j)
{
in >> mat[i][j];
smax += mat[i][j];
}
back(1);
out << smax;
return 0;
}