Pagini recente » Cod sursa (job #1186379) | Cod sursa (job #2758099) | Cod sursa (job #2904164) | Cod sursa (job #1235157) | Cod sursa (job #2757645)
#include <iostream>
#include <fstream>
using namespace std;
int n, m, a[16][16], semn_linie[16], semn_coloana[16], maxim;
void Citire()
{
ifstream f("flip.in");
f >> n >> m;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
f >> a[i][j];
}
int Suma()
{
int s = 0;
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
s = s + semn_linie[i] * semn_coloana[j] * a[i][j];
return s;
}
void BackSemnColoane(int coloana)
{
if(coloana == m)
{
int suma = Suma();
if(suma > maxim)
maxim = suma;
}
else
{
semn_coloana[coloana] = 1;
BackSemnColoane(coloana + 1);
int s = 0;
for(int i = 0; i < n; i++)
s = s + a[i][coloana];
if(s < 0)
{
semn_coloana[coloana] = -1;
BackSemnColoane(coloana + 1);
}
}
}
void BackSemnLinii(int linie)
{
if(linie == n)
{
BackSemnColoane(0);
}
else
{
semn_linie[linie] = 1;
BackSemnLinii(linie + 1);
int s = 0;
for(int i = 0; i < m; i++)
s = s + a[linie][i];
if(s < 0)
{
semn_linie[linie] = -1;
BackSemnLinii(linie + 1);
}
}
}
void Afisare()
{
ofstream g("flip.out");
g << maxim;
}
int main()
{
Citire();
BackSemnLinii(0);
Afisare();
return 0;
}